一、封装
封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
封装的好处
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员进行更精确的控制。
- 隐藏信息,实现细节。
封装的实现
- 需要修改属性的访问控制符(修改为private);一旦使用了private进行修饰,那么本类当中仍然可以随意访问。但是!超出了本类范围之外就不能再直接访问了。
- 创建getter/setter方法(用于属性的读写);
- 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性)。
间接访问private成员变量,就是定义一对儿Getter/Setter方法。必须叫setXxx或者是getXxx命名规则。对于Getter来说,不能有参数,返回值类型和成员变量对应;
对于Setter来说,不能有返回值,参数类型和成员变量对应。
public class Person{
private String name;
private int age;
private String sex;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
private int getAge(){
return age;
}
private void setAge(int age){
this.age = age;
}
public void setSex(String sex){
this.sex = sex;
}
}
如果没有setter(),getter()的话,那么Person类应该是这样的:
public class Person {
public String name ;
public String sex ;
public int age ;
}
我们应该这样使用它:
Person person = new Person();
person.age = 25;
person.name = "张三";
person.sex = "男";
但是如果需要修改Person,比如将sex修改为int类型,几十或者上百个这样的地方估计要改到崩溃,如果封装了,只需要修改setSex()方法就好了。另外,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。还有针对某些成员变量,不想让其他类知道值为多少,就可以不去做getter()操作,比如Person类中的sex,不想让其他人知道性别,就不做getSex()。还有就是private修饰的成员变量以及成员函数,只能无法在类外调用,做到隐藏的作用。比如:Person类中的成员变量以及getAge()和setAge()在其他类是无法获取到的。
public class Person{
private String name;
private int age;
private int sex;//1:男;2:女;0:保密
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
private int getAge(){
return age;
}
private void setAge(int age){
this.age = age;
}
public void setSex(String sex){
if(StringUtils.isNotEmpty(sex)){
if(sex.equals('男')){
this.sex = 1;
}