java面向对象之封装
面向对象的三大特征:封装,多态,继承
面向对象——封装:
封装的概念:
封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
封装的步骤:
1、使用private参数修饰该成员变量(private是私有的,只能在本类中进行访问,public是公共的,所有类都可以访问)
2、使用一种公共方法对每个参数进行赋值,用于对外访问
封装的好处(个人认为):
1、能够起到保护作用,其他人并不能直接对成员变量进行赋值,并且可以通过公共类对赋值的参数进行控制,避免输入错误的参数
2、操作相对简单(高内聚,低耦合),其他人只需要调用公共方法就可以操作该类;(另外对于IDEA来说,Alt+insert可以快速对成员变量进行封装,避免手写的烦恼)
3、能够隐藏功能的实现
实例:
需求:使用封装的方法实现一个简单的计算器
需求分析:首先要实现计算器,必须的参数是两个数字和一个符号,所以成员变量就可以定为data1,data2,symbol,另外对于计算器而言,只关心输出结果,所以我封装的时候并不需要设置getter方法,另外对于符号,得做基本的控制,不能输入非运算符也进行处理,鉴于此,实现代码如下:
实现1:单独对每一个参数进行封装(分别设置setter方法)
package Counter; public class Calculator1 { private int data1; private int data2; private char symbol; //对private类型的参数进行单独封装 public void setData1(int data1) { this.data1 = data1; } public void setData2(int data2) { this.data2 = data2; } public void setSymbol(char symbol) { this.symbol = symbol; } //定义一个公共方法,实现计算的功能 public void Cal(){ int result; if(symbol=='+'){ result = data1 +data2; }else if(symbol=='-'){ result = data1-data2; }else if(symbol == '*'){ result = data1*data2; }else{ result = data1/data2; } System.out.println("使用方法1计算的结果: "+result);
}
}
方法2:定义一个公共方法,用于整体的赋值:
package Counter; public class Calculator { private int data1; private int data2; private char symbol; //定义一个公共方法,用来传参数 这样写的好处是可以将参数控制在一个方法中,更加方便,也可以分开写 比如Calculator1类; public void setData(int data1,int data2,char symbol){ //因为只做整形数据的运算,所以对待输入数字不必要做校验; this.data1 = data1; this.data2 = data2; //对于运算符需要做判断,万一输入非运算符,比如A,?等; if (symbol == '+'|| symbol == '-'|| symbol == '*' ||symbol =='/'){ this.symbol = symbol; }else { this.symbol = '+'; } } //定义一个公共方法,实现计算的功能; public void Cal(){ int result = 0; switch(symbol){ case '+': result = data1+data2; break; case '-': result = data1-data2; break; case '*': result = data1*data2; break; case '/': result = data1/data2; break; } System.out.println("使用方法2计算的结果: "+result); } }
这样计算器类就基本写好了,来尝试调用它,看看结果
package Counter; public class Main { public static void main(String[] args){ //方法1:调用Calculator1的set方法 设置参数(每个参数单独设置,比较麻烦) Calculator1 cc = new Calculator1(); cc.setData1(7); cc.setData2(9); cc.setSymbol('*'); cc.Cal(); //方法2:调用Calculator的setData方法设置参数 Calculator c = new Calculator(); c.setData(3,4,'/'); c.Cal(); } }
这样输出的结果如下(值是随便定义的):
Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\mytest\out\production\mytest" Counter.Main 使用方法1计算的结果: 63 使用方法2计算的结果:0 Process finished with exit code 0
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
说明:作为一个java菜鸟,目前处于学习阶段,平时也在工作,晚上会上一个小时左右的课,基本上会在工作之余通过博客去整理回顾昨天的学习内容,希望能有所积累和提升,如果有人能看到文章,如果发现不对的地方,欢迎指正