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

子类B实例强转为父类A后,调用重写方法会执行哪个类的方法?

问题解答:向上转型后调用重写方法的执行逻辑

嘿,这个问题正好戳中了面向对象编程里多态的核心特性!答案很明确:当你把子类B的实例强制转换为父类A类型后,调用被重写的方法时,执行的是子类B中的方法实现。

这是因为大多数主流面向对象语言(比如Java、C#)的方法调用都是基于运行时对象的实际类型,而不是你声明的引用类型。哪怕你把对象的引用改成父类类型,运行环境依然能识别出它本质上是子类B的实例,所以会调用子类里重写的那个方法。

给你举个直观的代码例子就明白了:

// 父类A
class A {
    public void sayHello() {
        System.out.println("我是父类A的方法");
    }
}

// 子类B,继承自A并重写方法
class B extends A {
    @Override
    public void sayHello() {
        System.out.println("我是子类B的方法");
    }
}

// 测试类
public class PolymorphismTest {
    public static void main(String[] args) {
        // 创建子类B的实例,用父类A的引用指向它(向上转型)
        A myObj = new B();
        // 调用方法
        myObj.sayHello(); // 输出:我是子类B的方法
    }
}

简单总结一下:向上转型只是改变了引用的类型,并没有改变对象本身的实际类型。所以调用重写方法时,永远会执行对象实际所属类的那个实现——这就是多态的魅力所在,能让我们写出更灵活、可扩展的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:58