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