我正在阅读2005 年 4 月的 Sybex Complete Java 2 Certification Study Guide (ISBN0782144195)。本书适用于希望通过 java 认证的 java 开发人员。
在关于访问修饰符(以及其他修饰符)的一章之后,我发现了以下问题(#17):
对或错:如果类 Y 扩展类 X,两个类在不同的包中,并且类 X 有一个名为 abby() 的受保护方法,那么 Y 的任何实例都可以调用 Y 的任何其他实例的 abby() 方法。
这个问题让我有点困惑。
据我所知,您可以在同一类(或子类)的任何变量上调用受保护的方法。您不能在层次结构中比您更高的变量上调用它(例如,您实现的接口)。
例如,您不能仅仅因为您继承它而克隆任何对象。
但是这些问题没有提到变量类型,只提到了实例类型。
我有点困惑,回答“是”。
书中的答案是
错误的。从不同包中的超类继承受保护方法的对象可以在其自身上调用该方法,但不能在同一类的其他实例上调用。
这里没有关于变量类型的内容,只有实例类型。
这很奇怪,我不明白。
谁能解释这里发生了什么?