gpt4 book ai didi

java - 在父类和子类中创建相同的方法会提供一些奇怪的输出

转载 作者:行者123 更新时间:2023-12-01 16:43:02 25 4
gpt4 key购买 nike

在下面的代码中,我有三个问题。我知道在 Parent 和 Child 类中具有相同的功能没有任何意义,而且根本不是一个好的设计。但是,由于 Java 允许我这样做,所以可以编写以下代码。尝试了解幕后实际发生的情况。

1.当我从class A的构造函数调用f()时,我发现它正在调用子类f() 。这是预期的行为。但是,当父构造函数在初始化子类成员之前调用重载的 f() 时,为什么会打印“B”。

2.为什么我的 final 变量 X 有两个值(x=null , x=B)?

class A{
A(){
System.out.println("A's Constructor");
f();
}
void f() {System.out.println("A");}
}

class B extends A{
B(){
System.out.println("B's Constructor");
f();
}
final String x = "B";
void f() {System.out.println(x);}
}

public class JavaPOCSamples {

public static void main(String[] args) {
// TODO Auto-generated method stub
//System.out.println("Java POC");
new B();
}

}

上述代码中使用“B”.trim()时,输出如下:

A's Constructor
null // Note that a final variable X is null
B's Constructor
B // Note that a final variable X is changed to "B"

最佳答案

这正是预期的行为,也是您永远不应该从构造函数中调用可重写方法的原因。

B 的构造函数首先调用 A 的构造函数,后者调用 f()(来自类 B,因为它已被重写),打印 x,它仍然为空。然后 B 设置其初始化的成员变量(因此 x 不再为 null),打印一些内容并再次调用 f()...

关于java - 在父类和子类中创建相同的方法会提供一些奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59209199/

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