首页 >Java >java教程 >为什么我无法从另一个包访问 Java 子类中的受保护成员?

为什么我无法从另一个包访问 Java 子类中的受保护成员?

Linda Hamilton
Linda Hamilton原创
2024-12-10 04:47:12846浏览

Why Can't I Access a Protected Member in a Java Subclass From Another Package?

理解 Java 的 protected 修饰符

问题:

考虑两个类 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn