Java 受保护成员的范围

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; ............... }

Iam正在为SCJP做准备,我也知道受保护的成员范围在包中,以及其他包中,有一些条件,如仅在继承时才可能

例如: 我有三个班作为家长班孩子班朋友班

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
    没有
    保护
    ,但具有默认访问权限。我也很抱歉犯了错误。更正我昨天编辑了这个问题,请您检查一下。我们也编辑了这个问题以反映您的更改。我希望现在一切都清楚了。