gpt4 book ai didi

Java父类(super class)调用子类方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:20 25 4
gpt4 key购买 nike

我有这些类(class):

class A {
public void f() { System.out.println("f() in A"); }
public void g() { System.out.println("g() in A"); f(); }
}

class B extends A {
public void f() { System.out.println("f() in B"); }
}

为什么

B b = new B();
A a = b;
a.g();

打印出来

g() in A
f() in B

不是

g() in A
f() in A

有什么我想念的吗?

最佳答案

这是因为 Java 使用了 dynamic dispatch默认(和强制)在类的方法上。

此功能可确保在调用方法时,选择执行该方法的最专用版本。在您的情况下,由于 B extends A,这意味着 Bpublic void f() 实现比 >一个。因此,虽然 A a 是静态类型 A,但它是动态类型 B 并且选择了该方法。

关于Java父类(super class)调用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com