Parent可以调用Child Class方法吗?

时间:2009-09-07 01:22:24

标签: java inheritance

参考here

A是预编译的Java类(我也有源文件) B是我正在创作的Java类 B延伸A.

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

  • 我不想触摸A(仅作为a 最后一个选项虽然如果没有 存在其他解决方案)。
  • 我不想使用反射。

如上所述,如果需要,我可以修改A. 什么可能解决方案?

3 个答案:

答案 0 :(得分:40)

A应该定义它要调用的方法(可能是抽象的方法,A应该是一个抽象类,根据Paul Haahr的优秀guide); B可以(事实上具体必须,如果方法是抽象的)覆盖这些方法。现在,从A中的其他方法调用这些方法时,如果发生在B类的实例中,则转到B的覆盖。

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

答案 1 :(得分:15)

是的,如果你覆盖了super / base-classes的函数,那么对基类中 in 函数的调用将转到child / derived类。在我看来,这似乎是一个糟糕的设计,但你去了。

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".

显然,所有Derived的方法都必须已经在Base中定义,但是否则(没有内省)这样做在逻辑上是不可能的。

答案 2 :(得分:1)

我宁愿犹豫不决。如果我错了请纠正我然后我会删除,但听起来你想要保持A对象和B对象。如果它们确实不是同一个对象,那么你必须做的“捆绑在一起”(这是一个科学术语)会非常难看。