Java 受保护成员的范围
Iam正在为SCJP做准备,我也知道受保护的成员范围在包中,以及其他包中,有一些条件,如仅在继承时才可能 例如: 我有三个班作为家长班孩子班朋友班Java 受保护成员的范围,java,access-modifiers,Java,Access Modifiers,Iam正在为SCJP做准备,我也知道受保护的成员范围在包中,以及其他包中,有一些条件,如仅在继承时才可能 例如: 我有三个班作为家长班孩子班朋友班 package x.parent; class Parentclass{ protected int x=10; ............... } package x.child; class Childlass extends Parentclass{ super.x=20; ............... }
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中,其行为与私有成员不同。有四个访问修饰符
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
由于它使用默认修饰符,因此如果满足以下条件之一,则可以访问该修饰符:
因此它不符合标准,因此您无法访问。您甚至无法访问
Childclass
中的Parentclass.x
,因为x
具有默认可见性(不受保护)。看
编辑:
x.child.Friendclass
与x.parent.Parentclass
不在同一个包中。
x.child.Friendclass
不从x.parent.Parentclass
继承
正如TotalFrickinRockstarFromMars的摘要状态和Java访问控制文档也状态一样,这意味着不允许
Friendclass
访问字段x
如果您错了,可以通过在另一个包中使用继承来访问受保护的成员翻转定义“protected”和“no modifier”,no?@Damodar,zerocrates-是的,我翻转了它们。修复了。我昨天编辑了这个问题,请您检查一下Childclass中的作业x=20
也应该失败,因为它在另一个包中,并且成员x
没有保护
,但具有默认访问权限。我也很抱歉犯了错误。更正我昨天编辑了这个问题,请您检查一下。我们也编辑了这个问题以反映您的更改。我希望现在一切都清楚了。