我为SCJP做准备,我也知道受保护成员的作用域在包中以及在其他包中(在某些情况下,例如只有继承才可能)。
例如:我有三个类作为Parentclass Childclass Friendclass
package x.parent; class Parentclass{ protected int x=10; ............... } package x.child; class Childlass extends Parentclass{ super.x=20; ............... } package x.child; import x.parent.Parentclass; class Friendclass{ Parentclass pc = new Parentclass(); pc.x=30; ............... }
这背后的原因是什么,在Friendclass中,成员x将不接受为其分配值,而对于Childclass而言,它充当私有成员。
您甚至无法访问Parentclass.x,Childclass因为x具有默认可见性(不受保护)。参见http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
Parentclass.x
Childclass
x
编辑:
x.child.Friendclass与 不在同一个软件包 中x.parent.Parentclass。 x.child.Friendclass 不继承 自x.parent.Parentclass。
x.child.Friendclass
x.parent.Parentclass
如TotalFrickinRockstarFromMars的摘要状态和Java访问控制文档中所述,这意味着Friendclass不允许访问该字段x。
Friendclass