有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

指代here

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

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

  • 我不想碰A(只是作为一个 最后一个选项是如果否 存在其他解决方案)
  • 我不想使用反射

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


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

  3. # 3 楼答案

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

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