java 访问权限修饰符
2017-12-28 本文已影响842人
洒了油
一直以来,我了解的访问权限是这样的:
这是错误的不管你愿意不愿意,这幅图表达的信息是不确切的,或者说是不对的。
一个类A的属性和方法在其它类(不妨叫B)中通过A类的实例对A的属性和方法的访问权限与B是不是A的子类没有任何关系。因此,正确的图解应该是这样的:
这是对的对于private , default ,和public没什么好说的,关键想阐述一下protected修饰符访问权限与子类没有关系。
下面是我测试的过程:
包testa中定义的类A这是在 testa 包中定义的类A ,其中 int aa 和 helloA()都是用protected来修饰。
而我在 testb 包中定义的类B(继承了A)中以A类型的实例访问属性aa 和 helloA()方法均不能编译成功 :
由图可见,在子类B中试图通过父类A的实例a来访问类A的aa属性和helloA()方法是行不通的。
由于B继承了A,那么B继承了A除构造方法外的一切属性和方法,但是这些属性和方法只有权限在
protected或public修饰的情况下才可以通过B类的实例来访问。