You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OOP基础:超类与子类方法混合调用的执行逻辑问题

问题解答

执行的是Sub.m2,核心原因是面向对象的多态特性:实例方法的调用始终基于对象的实际类型,而非当前代码所在的类。

具体逻辑如下:

  1. 创建的是Sub类实例,调用Sub.m1后,Sub.m1先执行super.m1()触发Super类的m1方法。
  2. 在Super.m1中调用m2时,JVM会根据当前对象的实际类型(Sub)去查找对应的方法实现,因此会调用Sub类中重写的m2方法。

用Java代码示例验证:

class Super {
    public void m1() {
        System.out.println("Super.m1");
        m2(); // 调用的是实际实例的m2
    }

    public void m2() {
        System.out.println("Super.m2");
    }
}

class Sub extends Super {
    @Override
    public void m1() {
        System.out.println("Sub.m1");
        super.m1();
        System.out.println("Sub.m1 额外执行代码");
    }

    @Override
    public void m2() {
        System.out.println("Sub.m2");
    }
}

public class Demo {
    public static void main(String[] args) {
        Sub subInstance = new Sub();
        subInstance.m1();
    }
}

运行输出:

Sub.m1
Super.m1
Sub.m2
Sub.m1 额外执行代码

从输出可以明确看到,Super.m1中调用的m2是Sub类的实现。

内容的提问来源于stack exchange,提问作者Jan Verrept

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:12:34