Iam准备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不接受为其赋值,如果是子类,则表现为私有成员。
答案 0 :(得分:10)
有四种访问修饰符
private - just this class
no modifier - just this class or this package (NOT subclass)
protected - just this class, this package, or subclass
public - everyone and their cousin
由于它使用默认修饰符,因此如果满足下列条件之一,则它具有访问权限:
因此它没有达到标准,因此您无法访问。
答案 1 :(得分:1)
您甚至无法访问Parentclass.x
中的Childclass
,因为x
具有默认可见性(未受保护)。见http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
编辑:
x.child.Friendclass
与x.parent.Parentclass
不在同一个包中。
x.child.Friendclass
未从x.parent.Parentclass
继承。
作为TotalFrickinRockstarFromMars的摘要状态和Java访问控制文档也说明,这意味着Friendclass
不允许访问字段x
。