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 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式