封装 encapsulation
核心:不让外部直接对成员变量进行访问与操作,而是通过类的方法来对成员变量进行访问与操作。
- 这样做还能在方法内部编写代码逻辑实现成员变量的赋值前检查,避免成员变量被赋予非法值。
把操作成员变量的代码放在该成员变量所属的类里。如实现下面这几类功能的代码:
- 初始化成员变量
- 简单访问和设置成员变量的值(这类代码也被称作 Java Bean)
- 专有的一些计算逻辑
封装: 用类定义成员变量,并把操作成员变量的代码都放在类里,就是所谓的“封装”。其好处是:
- 可以集中管控,自己的成员变量别人不可以乱来,避免出现非法的状态,比如语法上合法但逻辑上不合理的数据状态(像库存变成负数);
- 代码逻辑可以公用,避免代码重复,修改的时候只需改一处;
- 封装得好,可以更好地抽象一类事物。
public class Person{
String name;
int age;
String sex;
double height;
// 提供下面的设置值方法给别的类使用,而非让别的类直接去操作 Person 类的成员变量
public void init(String name, int age, String sex, double height){
// 可以在这里添加检查值的合法性的判断代码
if (age <= 0){
System.out.println("xxxxxxxx");
xxxxx;
}
this.name = name;
this.age = age;
this.sex = sex;
this.height = height;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
// 调用方
public class Citizen{
public static void main(String[] args){
Person tom = new Person();
// tom.name = "Tom"; // Person 不要让别人这样去直接设置成员变量的值,而是通过调用方法来完成值得设置
// 封装后:
tom.init("Tom",23,"male","175"); // 通过这种方式来设置成员变量
}
}