当前位置: 首页 > 知识库问答 >
问题:

了解Java的受保护修饰符

束阳旭
2023-03-14

我在package1中有一个名为a的类,在Package2中有另一个名为C的类。C类扩展了A类。

A有一个实例变量,声明如下:

protected int protectedInt = 1;
package package1;

public class A {

    public int publicInt = 1;
    private int privateInt = 1;
    int defaultInt = 1;
    protected int protectedInt = 1;

}
package package2;
import package1.A;

public class C extends A{

    public void go(){
        //remember the import statement
        A a = new A();
        System.out.println(a.publicInt);
        System.out.println(a.protectedInt);

    }
}

这是怎么回事?

共有1个答案

巫马庆
2023-03-14

这是怎么回事?

您误解了protected的含义。您可以从C中访问A中声明的受保护成员,但仅限于C的实例或C的子类。有关受保护访问的详细信息,请参阅JLS的第6.6.2节。特别是:

设C为声明受保护成员的类。只允许在C的子类S的主体中进行访问。

所以这段代码很好:

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);
 类似资料:
  • 问题内容: 我在理解Java(或其背后的设计)中的受保护的访问修饰符时遇到了一些麻烦。我认为这意味着程序包访问和通过继承包含抽象成员的类的对象的访问。 我编写了以下示例代码。我看到,如果未注释,注释掉的行会产生编译错误。为什么我可以通过Second中的Second对象而不是Second中的First对象访问pro? 问题答案: 该网页链接@MadProgrammer给出了一个体面的解释: “ pr

  • 问题内容: 我在package1中有一个名为A的类,在package2中有一个称为C的类。C类扩展了A类。 有一个实例变量,其声明如下: 这是A类的代码 这是C类的代码: Eclipse在C.go()的最后一行下划线,并说“ A.protectedInt”不可见。似乎这与oracle文档中给出的“ protected”关键字的定义相冲突。 protected修饰符指定成员只能在其自己的程序包中(与

  • 我试图理解类中受保护成员的行为。我有一个类,其中包含受保护的整数。 类别: 还有另一个包,它有3个类,和。继承层次结构如下: 第1子类 子课堂 第3子类 在上述代码中,,,,,和工作正常,没有任何可见性问题。但是,,存在可见性问题。 根据JLS§6.6.2.1, 让C是声明受保护成员的类。只允许在C的子类S的主体内进行访问。 此外,如果Id表示实例字段或实例方法,则: 如果访问是通过限定名Q.Id

  • 问题内容: 为什么定义中的所有方法都是隐式的?为什么不允许使用方法? 问题答案: 因为接口应该表示“您可以在课堂外看到的东西”。添加非公共方法是没有意义的。

  • 问题内容: 我已经看到一些参考引用了Java中称为(两个词在一起)的访问修饰符: 我发现与此有关的页面之一在这里。我的学校课上也提到了这个访问修饰符(并说它存在)。但是,使用它会导致Java语言错误。 我尝试了变量和方法,我很确定它不存在,但是我想解释一下发生了什么。是否考虑过然后拒绝了?还是在新版本的Java中将其删除? 编辑:我不是在寻找有关关键字的信息。 问题答案: 删除访问修饰符 Java

  • 6xx受保护 600 Series,Repliesregardingconfidentialityandintegrity 631 Integrityprotectedreply. 632 Confidentialityandintegrityprotectedreply. 633 Confidentialityprotectedreply.