【问题标题】:How to polymorphic call a method from a stack of two different child types如何从两种不同子类型的堆栈中多态调用方法
【发布时间】:2020-12-05 14:33:05
【问题描述】:

我有 4 个单独的类 UI,Parent、child1 和 child2。 我有一个包含 child1 和 child2 的父堆栈。 我试图在迭代堆栈时调用一个方法,该方法根据它是 child1 还是 child2 类型而改变。

我尝试在 parent 中创建一个抽象方法并覆盖 child1 和 child2 中的方法,但它说方法不会覆盖或从超类型实现。

我尝试在父级中创建一个公共的空方法并覆盖每个子案例中的方法,但是当我从 UI 中的 main 调用该方法时,它会调用空方法。

我通过查看堆栈中的 instanceof 找到了一种解决方法,但我后来在尝试保存/加载数据的程序中遇到了问题。请查看下面的粗略代码,如有任何问题,请告诉我。

public abstract class parent {

    public void addToPuzzle(){};

}

public class child1 extends parent {

    public void addToPuzzle(abc)
}


public class child2 extends parent {

    public void addToPuzzle(wxyz)
}

public class ui{

    public void undoMove(){
        for(parent p : oldStack){
            p.addToPuzzle();
        }
    }
}

【问题讨论】:

  • 子类中的 method(someargument) 不会覆盖超类中的 method();参数列表必须匹配。
  • 父函数addToPuzzle 没有任何参数。但似乎addToPuzzle 在子类中接受了参数,这就是函数没有被覆盖的原因。当你有 UserEntry 类时,代码也让我感到困惑,它与父级有什么关系。你也没有提到函数addToPuzzle(wxyz)public void addToPuzzle(abc)中的参数类型
  • @DeepakPatankar 抱歉,用户条目应该是父项。对于父堆栈中的每个 p 我想调用 addToPuzzle 但它应该根据它是 child1 还是 child2 而改变

标签: java stack overriding overloading abstract-class


【解决方案1】:

父类中的方法是public void addToPuzzle(),而子类有一个不同的函数,它接受一个参数public void addToPuzzle(abc)

当满足以下条件时,子类将覆盖父类的方法:

  • 方法必须与父类中的方法同名。
  • 该方法必须具有与父类中相同的参数。
  • 必须存在 IS-A 关系(继承)。

【讨论】:

  • 当子类中的方法具有不同的参数时,是否有另一种不覆盖调用方法的方法?
  • 请更新孩子 1 和孩子 2 的 addToPuzzle 函数,这会让我对问题有更多的了解。
猜你喜欢
  • 1970-01-01
  • 2016-11-23
  • 2016-03-28
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多