访问修饰符继承:抽象类中的最终方法
Posted
技术标签:
【中文标题】访问修饰符继承:抽象类中的最终方法【英文标题】:Access modifiers inheritance: on final methods in abstract classes 【发布时间】:2014-12-10 17:49:08 【问题描述】:通过子访问时,隐式继承方法(父的抽象最终方法继承在子上)的访问可见性是否始终相同?
什么是隐式转发规则?
class package0.Parent ACCESS_MODIFIER final void f();
class package1.B extends A /* Implicit f?*/
class package2.C extends B /* Implicit f? */
那么:ACCESS_MODIFIER
会一直被转发吗?如果是这样,为什么是案例1?那么案例3呢?
f()
是 private
,则不转发可见性,因为 B
看不到它。
案例 2:如果父 f()
是 public
,我猜任何使用 B
或 C
的人都可以在 f
上使用。
案例3:如果父f()
是protected
,我猜B
会将方法“暴露”为受保护的,这意味着C
可以看到它。
【问题讨论】:
很难理解你在这里的意思——尤其是“抽象的最后”部分。一段简短但完整的 代码 包含适合您不清楚的问题的问题,这样回答问题会容易得多。 改进措辞,抱歉 目前还不清楚“转发”是什么意思。 JLS 6.6 可能是这里最好的资源:@987654321@ 转发的意思如下。我对抽象类 final 方法使用了访问修饰符。它通常会转发它,因此当孩子隐含地公开该方法确实使用相同的可见性时。这意味着可见性范围是跨继承转发的,但私有是一个例外,因为它本身具有意义并且不转发,它适用于抽象类本身 包裹内容与您的问题相关吗?既然你已经编辑了它,你不应该从标题中删除abstract final
。它仍然令人困惑。
【参考方案1】:
你的措辞是半不清楚的。我解释你的问题的方式是:
class Aprotected void f();
class B extends A/* Can see f. */
class C extends B/* Can see f? */
如果是这样,答案是肯定的:C
将能够访问f
。
【讨论】:
以上是关于访问修饰符继承:抽象类中的最终方法的主要内容,如果未能解决你的问题,请参考以下文章