Java 面向对象-封装
何为封装(Encapsulation)
面向对象的开发原则为“高内聚,低耦合”,即类的内部数据操作细节自己完成,不允许外部干涉,仅暴露少量方法给外部调用使用。例如,开车,我们无需懂得油门、离合、变速箱也可以驾驶。
- 封装性本质是解耦(decouple) 的表现
在JAVA中,实现封装就是控制类或成员的可见范围,即需要依赖访问控制修饰符,又称权限修饰符。
JAVA有四种权限修饰符有:public \ protected \ 缺省 \ private
修饰符 | 本类内部 | 本包内 | 其他包的子类 | 其他包非子类 |
---|---|---|---|---|
private | √ | × | × | × |
缺省 | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | × |
封装性体现
- 成员变量私有化
私有化类的成员变量,提供get和set方法,以供外界调用。好处是让调用者按照预先设计的方法来访问数据,限制对成员变量的不合理访问,有利于保护数据的安全性和完整性。另外,封装也有助于修改,提高代码可维护性,只要对外提供的方法不变,调用者就察觉不到内部的修改。
public class Person {
// 私有化属性
private int age;
private String name;
private char gender;
// alt+insert快捷键提供get/set方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(22);
p1.setName("Jack");
p1.setGender('M');
System.out.println("name = " + p1.getName() + ", Age = " + p1.getAge() + ", Gender = " + p1.getGender());
}
}
// Name = Jack, Age = 22, Gender = M