定义
将函数实现细节封装起来,防止代码和数据被外部类随意访问。
要访问该类的代码和数据,必须通过严格的接口控制
优点
减少耦合
便于理解、维护
隐藏代码细节,控制外部访问,增强安全性
内部结构可以自由修改
对成员变量进行精确控制
实现Java封装的步骤
- 修改属性的可见性来限制外部类对属性的访问(一般限制为private私有)
- 对私有属性创建一对赋取值方法,用于外部访问
实例
package TestEncapsulation;
public class EncapsulationPerson {
// 设置为private,只有本类才能访问,外部无法直接访问
private String name;
private int age;
// 外部类访问该类成员变量的入口,被称为getter和setter方法
// 访问类中私有成员变量,都要通过这些getter和setter方法
public void setAge(int age) {
this.age = age;
// this 解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突
}
public int getAge() {
return age; // 不用加this
}
public void setName(String myName) {
name = myName; // 不同名,不需要加this
}
public String getName() {
return name;
}
}
package TestEncapsulation;
public class TestEncapsulation {
public static void main(String[] args) {
EncapsulationPerson person = new EncapsulationPerson();
System.out.println("age: " + person.getAge()); // 实例变量,未赋值,会有默认值0
person.setAge(23);
System.out.println("age: " + person.getAge());
System.out.println("name: " + person.getName()); // 实例变量,未赋值,会有默认值null
person.setName("doudou");
System.out.println("name: " + person.getName());
// System.out.println(person.name); // name 在 TestEncapsulation.EncapsulationPerson 中是 private 访问控制
}
}