Sunday_Vssupermadman 2013-10-05 04:10 采纳率: 0%
浏览 1225

请问下这段代码正确的原因,为什么父类可以调用抽象方法,执行的是子类重写的方法

public class TestA {

public static void main(String[] args) {
    TestA a = new TestA();
    a.start();

}

public void start(){
    B b = new B();
    b.funA();
}

public abstract class A {
    public void funA(){
        System.out.println("I'm funA in A ");
        funB();
    }

    abstract void funB();
}

public class B extends A{

    @Override
    public void funA() {
        super.funA();
    }

    @Override
    void funB() {
        System.out.println("I'm funB in B");
    }

}

}

我就是想问为什么调用父类方法后,父类为什么调用的是子类的方法,不是调用抽象么,抽象不是不能被调用么

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-25 18:23
    关注

    该回答引用ChatGPT

    在这段代码中,父类 A 中的方法 funA() 被子类 B 重写了,因此在子类 B 中调用 funA() 方法时,实际上是调用的子类 B 中的方法。具体来说,当在子类 B 中调用 super.funA() 时,会首先调用父类 A 中的 funA() 方法,然后在父类 A 的 funA() 方法中调用了抽象方法 funB(),而子类 B 中已经实现了 funB() 方法,因此在这里调用的是子类 B 中的 funB() 方法。


    抽象方法不能被直接实例化调用,但是在非抽象方法中可以调用抽象方法,而具体的实现会由子类提供。在这个例子中,父类 A 中的 funA() 方法是非抽象方法,因此可以调用抽象方法 funB(),而具体的实现由子类 B 提供。

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置