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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)