【问题标题】:Proper (Java) convention to access ancestor and parent methods?访问祖先和父方法的正确(Java)约定?
【发布时间】:2011-07-11 11:24:57
【问题描述】:

从继承链下游访问祖先和父方法的正确约定是什么?

例如,methodA() 驻留在基祖先类中,methodB() 驻留在父类中。如果我在一个扩展父级的子类/子类中(进而扩展了祖先/基类),那么访问methodA() 的正确方法是什么?

显然super.super.methodA() 是不允许的。

有效的是super.methodA()this.methodA() 和简单地调用methodA()

以上三种情况中哪一种是调用位于祖先类中的methodA()的“正确”方式?

【问题讨论】:

    标签: java class inheritance methods extends


    【解决方案1】:

    如果methodA() 仅在祖父类中定义,并且没有在父类或子类中被覆盖,那么只需在子类中调用methodA() 将正确调用继承的方法。

    【讨论】:

    • 我想我真正想要了解的是各种形式的方法调用中的歧义。对于外部程序员(尤其是在没有可用的 API/文档的情况下),如何知道 methodA() 所在的位置。 super.xxx 意味着父调用。 this.xxx 意味着一个常驻调用,所以只是 xxxx()
    • @Chrys:没有歧义。方法调用将解析为最具体类型的方法。如果您不提供有意义的 API 或文档,那么您代码的用户将不得不像库的作者(您)一样找出它:遍历继承层次结构以找到定义该方法的最接近的类在。
    【解决方案2】:

    不允许访问类的祖父方法。请参阅Why is super.super.method(); not allowed in Java? 以获取更多信息。

    【讨论】:

    • 我想我的问题有点模棱两可。我可以使用上面我的问题中的任何方法调用来访问 methodA() 。由于父类扩展了祖父类,因此任何扩展父类的类也可以访问祖父类方法,因为它们沿着继承链向下流动。
    猜你喜欢
    • 2021-01-11
    • 2011-06-09
    • 1970-01-01
    • 2013-12-08
    • 2012-04-26
    • 1970-01-01
    • 2013-04-15
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多