【问题标题】: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。它仍然令人困惑。

标签: java inheritance polymorphism abstract-class modifiers


【解决方案1】:

你的措辞是半不清楚的。我解释你的问题的方式是:

class A{protected void f();}
class B extends A{/* Can see f. */}
class C extends B{/* Can see f? */}

如果是这样,答案是肯定的:C 将能够访问f

【讨论】:

    猜你喜欢
    • 2015-02-09
    • 2012-11-14
    • 1970-01-01
    • 2018-06-26
    • 2016-01-29
    • 2013-09-27
    • 2013-09-18
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多