| 访问权限 | 本类 | 本包的类 | 子类 | 非子类的外包类 |
|---|---|---|---|---|
| public | 是 | 是 | 是 | 是 |
| protected | 是 | 是 | 是 | 否 |
| default | 是 | 是 | 否 | 否 |
| private | 是 | 否 | 否 | 否 |
- public
- 只要加了这个关键字都可以被访问
- private
- 加了这个关键字只能在本类中访问
- default
- 加了这个关键字,某个成员的访问权限只对同包的类开放
- 某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员
- 跟父亲同包的可以继承,不同包的私生子不能继承
- 某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员
- 加了这个关键字,某个成员的访问权限只对同包的类开放
- protected
- 当某个成员能被所有的子类继承,但不能被外包的非子类访问
- 在同一个包内,子类实例可以访问自身继承的方法 ```java package p1; import p2.Son2;
- 当某个成员能被所有的子类继承,但不能被外包的非子类访问
public class Door {
public static void main(String[] args) {Son son = new Son();son.f();Son2 son2 = new Son2();son2.f();Father father = new Father();father.f();}
}
- **在同一个包内**,子类可以访问父类实例的方法```javapackage p1;public class Son extends Father {public static void main(String[] args) {Father father = new Father();father.f();}}
- **不在同一个包内**,子类可以访问子类实例自身继承的方法,如果不是在子类内就不可以
package p2;import p1.Father;public class Son2 extends Father {public static void main(String[] args) {Son2 son2 = new Son2();son2.f();}}
- **不在同一个包内**,子类**不可以**访问父类实例的protected方法
package p1;public class Son extends Father {public static void main(String[] args) {Father father = new Father();father.f();//编译错误}}
- **不在同一个包内**,该类**不可以**访问其他类实例的protected方法,也就是说不在同一个包内,除了子类创建自身子类实例访问继承方法外其他都不可以
package p2;import p1.Father;import p1.Son;public class Door {public static void main(String[] args) {Father father = new Father();father.f();//编译错误Son2 son2 = new Son2();son2.f();//编译错误Son son = new Son();son.f();//编译错误}}
