封装

102 阅读1分钟

封装是面向对象的三大特征之一。封装的理念:高内聚,低耦合

封装的作用和含义:

高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;

低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。

编程中封装的具体特点:

  • 提高代码安全性
  • 提高代码复用性
  • 高内聚:封装细节,便于修改内部代码,提高可维护性
  • 低耦合:简化外部调用,便于调用者使用,便于扩展和协作

封装的实现

Java是使用访问控制符来控制哪些细节需要封装,哪些细节需要暴露的。

Java中4种"访问控制符":

private、default、projected、public

private:同一个类中使用 default:同一个类或者同一个包中使用 protected:同一个类或者同一个包中或者子类中使用 public: 同一个类或者同一个包或者子类或者所有类中

image.png

image.png

关于protected的两个细节:

  1. 若父类和子类在同一个包中,子类可访问父类的protected成员,也可以访问父类对象的protected成员
  2. 若子类和父类不在同一个包中,子类可访问父类的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); // 报错
    }
}