从父类方法调用子类方法

Posted

技术标签:

【中文标题】从父类方法调用子类方法【英文标题】:Call Child class method from Parent class method 【发布时间】:2017-11-09 21:06:04 【问题描述】:

考虑以下情况

class A

    X()
    
        //some code
        Y();
    


class B extends A

    Y() //some code 

如果我创建类B 的对象,并且我尝试使用从A 扩展的函数X,那么函数X 是否可以访问函数YB的调用对象。

【问题讨论】:

显而易见的问题:您为什么要这样做?在我看来它像一个 XY 问题 您为什么要这样做?它被认为是让超类调用子类上的方法的反模式。我想你可能想看看抽象类及其方法声明。 【参考方案1】:

你可以,但必须满足这一点

    一个类是抽象的 Y 方法也很抽象

例子:

abstract class A 
    void X() 
        Y();
    

    abstract void Y();


class B extends A 
    @Override
    void Y() 
        System.out.println("Hello from B class");
    

在这种形式下,每当类 A 调用 Y 时,它实际上会调用抽象方法 Y 的实现方法

【讨论】:

我冒昧地将您的答案链接到我的答案中,因为您的答案已经很好地解释了该解决方案。如果有问题,请不要犹豫;)【参考方案2】:

仅当A 具有具有相同签名的方法(或超类具有相同签名),否则它无法找到/使​​用未在其上下文中定义的方法。

这是可以做到的

带有A中方法的实现 通过使用A 中的抽象方法(参见ΦXocę 웃 Пepeúpa ツ answer)。

第一个解决方案并不总是最好的,因为你可以有一个在A 中什么都不做的方法,比如:

class A
    void Y()

注意:如果您在两个类中都有Y(),则多态性可以确保B 的实例将使用他自己的实现。

如果您希望能够创建 A 的实例,则第二种解决方案可能会出现问题,因为它将是抽象的。

【讨论】:

以上是关于从父类方法调用子类方法的主要内容,如果未能解决你的问题,请参考以下文章

尽管子类中也有相同的方法,但如何从父类停止子类对象的调用方法

如何从父类调用一个方法到它的子类?

子类可以直接调用父类的函数吗

为啥java的子类中必须调用父类的构造方法

python子类调用父类的方法

如何在java中调用另一个类中子类里的一个变量?