封装是面向对象的三大特征之一。封装的理念:高内聚,低耦合。
封装的作用和含义:
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;
低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。
编程中封装的具体特点:
- 提高代码安全性
- 提高代码复用性
- 高内聚:封装细节,便于修改内部代码,提高可维护性
- 低耦合:简化外部调用,便于调用者使用,便于扩展和协作
封装的实现
Java是使用访问控制符来控制哪些细节需要封装,哪些细节需要暴露的。
Java中4种"访问控制符":
private、default、projected、public
private:同一个类中使用 default:同一个类或者同一个包中使用 protected:同一个类或者同一个包中或者子类中使用 public: 同一个类或者同一个包或者子类或者所有类中
关于protected的两个细节:
- 若父类和子类在同一个包中,子类可访问父类的protected成员,也可以访问父类对象的protected成员
- 若子类和父类不在同一个包中,子类可访问父类的protected成员,但是不可以访问父类对象的protected成员
同一个类中:4个修饰符都可以访问:
package encapsulation.a;
public class Person {
private int testPrivate;
int testDefault;
protected int testProtected;
public int testPublic;
public void test() {
System.out.println(this.testPrivate);
System.out.println(this.testDefault);
System.out.println(this.testProtected);
System.out.println(this.testPublic);
}
}
同一个包中:和上面Person处于同一个包中
package encapsulation.a;
public class Student {
public void study () {
Person p = new Person();
System.out.println(p.testDefault);
System.out.println(p.testProtected);
System.out.println(p.testPublic);
System.out.println(p.testPrivate); // 报错,无法访问
}
}
不在同一个包中:和上面Person不在同一个包中
package encapsulation.b;
import encapsulation.a.Person;
public class Boy extends Person {
public void study () {
Person p = new Person();
System.out.println(p.testPublic);
System.out.println(p.testDefault); // 报错
System.out.println(p.testProtected); // 报错
}
}