父级是否可以调用子类方法?

2022-09-02 00:12:05

参考这里

A是一个预编译的Java类(我也有源文件)B是一个Java类,我正在编写
B扩展A。

如何实现逻辑,以便 A 可以调用 B 具有的方法。
以下是条件:

  • 我不想触摸A(只是作为最后一个选项,尽管如果没有其他解决方案存在)。
  • 我不想使用反射。

如前所述,如果需要,我可以修改A。无论哪种方式,可能的解决方案是什么?


答案 1

类应该定义它将要调用的方法(可能是抽象的,根据Paul Haahr的优秀指南,A应该是一个抽象类); 可以(实际上,如果方法是抽象的,则为具体的 MUST)覆盖这些方法。现在,当在类 B 的实例中发生时,从 中的其他方法调用这些方法,请转到 B 的重写。ABA

整体设计模式称为模板方法;要重写的方法通常称为“钩子方法”,而执行调用的方法称为“组织方法”。


答案 2

是的,如果您重写超/基类的函数,那么对基类这些函数的调用将转到子类/派生类。在我看来,这似乎是一个糟糕的设计,但你去了。

class Base
{
    public void foo()
    {
        doStuff();
    }
    public void doStuff()
    {
        print("base");
    }
}

class Derived extends Base
{
    @Override
    public void doStuff()
    {
        print("derived");
    }
}

new Derived().foo(); // Prints "derived".

显然,所有的方法都必须在 中定义,但要以其他方式(没有内省)来做,在逻辑上是不可能的。DerivedBase


推荐