此博客仅为个人笔记,思路文字如有侵权,可以删除????
- private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
- default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问。
- protected: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅同一个包中可以跨类访问,而且 允许跨包访问。
同一个类中 | 同一个包中 | 不同包的子类中 | 在不同包的非子类中 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
空 | √ | √ | × | × |
private | √ | × | × | × |
实验验证:
1.创建了5个类 ,A,B1,B2,C,D,其中A,B1,B2在一个包里,C,D在一个包里,如下
2.A中定义了四个成员变量和四个方法,权限不同:
3.B1类与A在同一个包中
- 若采用实例化方式访问A,则除了private的方法和变量外均可访问
- 若采用直接访问的方法,均不能访问
4.B2类与A在同一个包中,B2继承A
- 若采用实例化方式访问A,则除了private的方法和变量外均可访问
- 若采用直接访问的方法,则除了private的方法和变量外均可访问
5.C与A不在一个包中,C继承A - 若采用实例化方式访问A,则除了public的方法和变量外均不可访问
- 若采用直接访问的方法,可以访问public和protected的方法和变量
6.D与A不在一个包中 - 若采用实例化方式访问A,则除了public的方法和变量外均不可访问
- 若采用直接访问的方法,均不可访问
总结
- 实例化方式访问:无论两个类是否是继承关系,都与继承无关。只取决于是否在同一个包中,若同一个包中,则除了private以外的所有方法和成员变量均可以访问;不在同一个包中只能访问public
- 直接访问:
如果没有关系:什么都不能访问
如果是继承关系:同一个包中则除了private均可访问,不同包中除了private和default均可访问