【发布时间】: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呢?
- 案例 1:如果父
f()是private,则不转发可见性,因为B看不到它。 - 案例 2:如果父
f()是public,我猜任何使用B或C的人都可以在f上使用。 - 案例3:如果父
f()是protected,我猜B会将方法“暴露”为受保护的,这意味着C可以看到它。
【问题讨论】:
-
很难理解你在这里的意思——尤其是“抽象的最后”部分。一段简短但完整的 代码 包含适合您不清楚的问题的问题,这样回答问题会容易得多。
-
改进措辞,抱歉
-
目前还不清楚“转发”是什么意思。 JLS 6.6 可能是这里最好的资源:@987654321@
-
转发的意思如下。我对抽象类 final 方法使用了访问修饰符。它通常会转发它,因此当孩子隐含地公开该方法确实使用相同的可见性时。这意味着可见性范围是跨继承转发的,但私有是一个例外,因为它本身具有意义并且不转发,它适用于抽象类本身
-
包裹内容与您的问题相关吗?既然你已经编辑了它,你不应该从标题中删除
abstract final。它仍然令人困惑。
标签: java inheritance polymorphism abstract-class modifiers