受保护成员的范围

时间:2011-05-08 06:50:22

标签: java access-modifiers

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不接受为其赋值,如果是子类,则表现为私有成员。

2 个答案:

答案 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. 是班级本身的一部分(Nope!)
  2. 是班级本身的一部分(Nope!)
  3. 因此它没有达到标准,因此您无法访问。

答案 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