当前位置: 首页 > 面试题库 >

了解Java的protected修饰符

解晟
2023-03-14
问题内容

我在package1中有一个名为A的类,在package2中有一个称为C的类。C类扩展了A类。

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

protected int protectedInt = 1;

这是A类的代码

package package1;

public class A {

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

}

这是C类的代码:

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);

    }
}

Eclipse在C.go()的最后一行下划线,并说“ A.protectedInt”不可见。似乎这与oracle文档中给出的“ protected”关键字的定义相冲突。

protected修饰符指定成员只能在其自己的程序包中(与package-private一样)访问,并且只能由其在另一个程序包中的类的子类访问。

这里发生了什么?


问题答案:

你误解了的含义protected。你可以访问A从中声明的受保护成员C,但只能访问的实例C或的子类C。有关受保护访问的详细信息,请参见JLS的6.6.2节。尤其是:

C为声明受保护成员的类。仅在C的子类S的主体内允许访问。

另外,如果Id表示实例字段或实例方法,则:

  • […]

  • 如果通过字段访问表达式E.Id(其中E是主表达式)或通过方法调用表达式E.Id(…)(其中E是主表达式)进行访问,则仅当且仅当允许访问时,如果E的类型是S或S的子类。

(强调我的。)

所以这段代码就可以了:

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);


 类似资料:
  • 我在package1中有一个名为a的类,在Package2中有另一个名为C的类。C类扩展了A类。 A有一个实例变量,声明如下: 这是怎么回事?

  • 本文向大家介绍asp.net 修饰符介绍(关于public、private、protected、internal),包括了asp.net 修饰符介绍(关于public、private、protected、internal)的使用技巧和注意事项,需要的朋友参考一下 1.private修饰符 private修饰符用于设置类或类成员的访问权限仅为所属类的内部, private也被称为私有修饰符。某些时候

  • 本文向大家介绍简述private、protected、pubic、internal修饰符的访问权限相关面试题,主要包含被问及简述private、protected、pubic、internal修饰符的访问权限时的应答技巧和注意事项,需要的朋友参考一下 答: private : 私有成员, 在类的内部才可以访问(只能从其声明上下文中进行访问) protected : 保护成员,该类内部和从该类派生的

  • 主要内容:final 修饰变量,final修饰方法,final修饰类,final 修饰符使用总结final 在 Java 中的意思是最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思。final 应用于类、方法和变量时意义是不同的,但本质是一样的,都表示不可改变,类似 C# 里的 sealed 关键字。 使用 final 关键字声明类、变量和方法需要注意以下几点: final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量。 final 用在方法的前面表示方法不可以

  • 根据留档(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)的第二个表,没有标识符的成员对子类不可见。 但是,当我运行下面的示例代码时,“1”(b的内容)被打印出来! 如果没有访问修饰符的成员不能从子类访问,那么为什么在本例中打印它 它应该抛出一个错误,就像在私有访问修饰符中一样,不是吗?

  • 本文向大家介绍Java接口中的修饰符,包括了Java接口中的修饰符的使用技巧和注意事项,需要的朋友参考一下 示例 《 Oracle Java样式指南》指出: 当修饰符是隐式的时,不应将它们写出来。 (有关上下文和指向实际Oracle文档的链接,请参见Oracle Official Code Standard中的修饰符。) 此样式指南特别适用于界面。让我们考虑以下代码片段: 变数 所有接口变量都是具