不同包中受保护变量的角色和访问级别

时间:2015-07-26 10:42:35

标签: java oop

根据我的理解规则和受保护变量的访问级别:
如果是同一个包

class A {    

protected int =200;    

}    

class B extends A {    

B是B
的ref变量 B.i压倒了B类中i的值

b.i = 400;    

a是A
的ref变量 a.i将始终打印200

} 



class C extends B {    

c是C的ref变量 c.i覆盖C类中i的值

c.i = 500;  

a是A的ref变量 a.i将始终打印200

}    

结论:A类的受保护成员在所有类的相同包中是公共的。

如果不同的包使用A
这里A和D不在同一个包中

class D extends A {     

System.out.print(a.i);    

上面的语句会抛出编译时错误
这里a.i无法访问,我现在在A
中是私人的 您只能将i用于D

的ref变量
System.out.print(d.i);    
//no error

}

class E extends D {    
System.out.print(a.i);    

上面的语句会抛出编译时错误
这里a.i无法访问,我现在在A

中是私人的
System.out.print(d.i);    

上面的语句会抛出编译时错误
这里d.i无法访问,我现在在D私人 您只能将i用于E

的ref变量
System.out.print(e.i);  

没有错误

} 

结论:A类的受保护成员在其直接子类的其他包中表现为私有变量。

有人可以向我提供有关受保护变量访问级别的更多详细信息吗?

2 个答案:

答案 0 :(得分:2)

您是否尝试过official Java tutorial,它对受保护的修饰符用法提供了相当不错的解释?

  

protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问。

或者,如果你有,但你仍然有一些问题,请指明一点

答案 1 :(得分:0)

阅读此链接,您将找到答案。

https://stackoverflow.com/a/19949375/5152910

创建一些getter和setter以在其他子类中使用该变量,或者使用this.i来访问变量i。