访问权限 本类 本包的类 子类 非子类的外包类
    public
    protected
    default
    private
    • public
      • 只要加了这个关键字都可以被访问
    • private
      • 加了这个关键字只能在本类中访问
    • default
      • 加了这个关键字,某个成员的访问权限只对同包的类开放
        • 某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员
          • 跟父亲同包的可以继承,不同包的私生子不能继承
    • protected
      • 当某个成员能被所有的子类继承,但不能被外包的非子类访问
        • 在同一个包内,子类实例可以访问自身继承的方法 ```java package p1; import p2.Son2;

    public class Door {

    1. public static void main(String[] args) {
    2. Son son = new Son();
    3. son.f();
    4. Son2 son2 = new Son2();
    5. son2.f();
    6. Father father = new Father();
    7. father.f();
    8. }

    }

    1. - **在同一个包内**,子类可以访问父类实例的方法
    2. ```java
    3. package p1;
    4. public class Son extends Father {
    5. public static void main(String[] args) {
    6. Father father = new Father();
    7. father.f();
    8. }
    9. }
    1. - **不在同一个包内**,子类可以访问子类实例自身继承的方法,如果不是在子类内就不可以
    1. package p2;
    2. import p1.Father;
    3. public class Son2 extends Father {
    4. public static void main(String[] args) {
    5. Son2 son2 = new Son2();
    6. son2.f();
    7. }
    8. }
    1. - **不在同一个包内**,子类**不可以**访问父类实例的protected方法
    1. package p1;
    2. public class Son extends Father {
    3. public static void main(String[] args) {
    4. Father father = new Father();
    5. father.f();//编译错误
    6. }
    7. }
    1. - **不在同一个包内**,该类**不可以**访问其他类实例的protected方法,也就是说不在同一个包内,除了子类创建自身子类实例访问继承方法外其他都不可以
    1. package p2;
    2. import p1.Father;
    3. import p1.Son;
    4. public class Door {
    5. public static void main(String[] args) {
    6. Father father = new Father();
    7. father.f();//编译错误
    8. Son2 son2 = new Son2();
    9. son2.f();//编译错误
    10. Son son = new Son();
    11. son.f();//编译错误
    12. }
    13. }