问题:
考虑两个类 A 和 C,其中 C 扩展了 A。假设A 将实例变量声明为 protected int protectedInt = 1。尽管期望受保护的成员应该可以在对于其他包中的子类,Eclipse 将对类 C 中的 protectedInt 的访问标记为不可见。
答案:
Java protected 修饰符允许访问其自己包中的成员以及子类,但仅当通过子类的实例进行访问时。这是因为受保护的访问范围仅限于子类类型,而不是声明受保护成员的类。
根据 Java 语言规范 (JLS),“仅允许在子类体内进行访问” C 的 S。”这意味着即使 C 扩展了 A,也不允许从 A 的实例直接访问 protectedInt。
解决方案:
访问子类中的 protected 成员,必须使用子类类型。例如,以下代码是有效的:
C c = new C(); System.out.println(c.protectedInt);
在这种情况下,访问是通过子类 (C) 的实例进行的,因此受保护的成员是可见的。
以上是为什么我无法从另一个包访问 Java 子类中的受保护成员?的详细内容。更多信息请关注PHP中文网其他相关文章!