【问题标题】: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 问题
  • 您为什么要这样做?它被认为是让超类调用子类上的方法的反模式。我想你可能想看看抽象类及其方法声明。

标签: java oop inheritance methods


【解决方案1】:

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

  1. 一个类是抽象的
  2. 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 中什么都不做的方法,比如:

class A{
    void Y(){}
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多