gpt4 book ai didi

java - Java 构造函数内部的多态性

转载 作者:行者123 更新时间:2023-12-02 11:07:29 25 4
gpt4 key购买 nike

代码:

class A{

A() {
test();
}
void test(){
System.out.println("from A");
}
}

class B extends A {

void test() {

System.out.println("from B");

}

}

class C {

public static void main(String args []){

A a = new B();

a.test();
}
}

输出:

from B 
from B

为什么要这样打印?

最佳答案

这是极其糟糕的代码。发生的情况是 void test() 在子类 B 中被重写。

new B(); 创建类 B 的实例。您引用将其强制转换为 A 的事实与此无关。但即使子类尚未构造,Java 运行时也会从父类 A 的构造函数中调用该子类中的方法。

使用此(反)模式时要格外小心! (请注意,在 C++ 中,您会得到未定义的行为)。

关于java - Java 构造函数内部的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178133/

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