首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >父类可以调用子类方法吗?

父类可以调用子类方法吗?
EN

Stack Overflow用户
提问于 2009-09-07 01:22:24
回答 3查看 74.7K关注 0票数 21

引用here

A是预编译的Java类(我还有源文件)B是我正在编写的Java类

B扩展了A。

如何实现逻辑,使A可以调用B拥有的方法。

以下是条件:

  • 我不想使用A(只作为最后一个选项,但前提是不存在其他解决方案)。
  • 我不想使用反射。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-07 01:26:37

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

总体设计模式称为钩子(Template Method);要覆盖的方法通常称为“钩子方法”,执行调用的方法称为“组织方法”。

票数 46
EN

Stack Overflow用户

发布于 2012-11-22 18:43:15

是的,似乎如果你覆盖了超/基类的函数,基类中对这些函数的调用将转到子类/派生类。在我看来,这似乎是一个糟糕的设计,但这就对了。

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中定义,但是如果不这样做(没有内省),在逻辑上是不可能的。

票数 17
EN

Stack Overflow用户

发布于 2009-09-07 01:31:10

如果这样做,我会比较犹豫。如果我错了,请纠正我,然后我会删除它,但听起来你想维护一个A对象和一个B对象。如果它们确实不是同一个物体,那么你不得不做的“捆绑在一起”(这是一个科学术语)将是相当丑陋的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1387207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档