访问修饰符继承:抽象类中的最终方法

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呢?

案例 1:如果父 f()private,则不转发可见性,因为 B 看不到它。 案例 2:如果父 f()public,我猜任何使用 BC 的人都可以在 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

【讨论】:

以上是关于访问修饰符继承:抽象类中的最终方法的主要内容,如果未能解决你的问题,请参考以下文章

方法有那些访问控制修饰符,分别是啥作用

java中抽象类与接口中方法访问修饰符问题 (

this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符

java中的类修饰符成员变量修饰符方法修饰符。

java中的类修饰符成员变量修饰符方法修饰符

java中的类修饰符成员变量修饰符方法修饰符