gpt4 book ai didi

java - 为什么继承抽象类时执行结果不符合预期

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

class C {
public static void main(String[] args){
B test = new B(1);
}
}

abstract class A {
int i = 1;

abstract void test();

public A(){
System.out.println("before test()");
test();
System.out.println("after test");
}
}

class B extends A {
int i = 1;
@Override
void test(){
System.out.println("test()" + i);
}
public B(int i) {
System.out.println("before test()");
test();
System.out.println("after test");
}
}

当我运行此代码时,输​​出为

before test()
test()0
after test
before test()
test()1
after test

我知道第一组输出结果来自A的构造方法,但我不知道
为什么变量i第一次是0,但第二次是对的。

最佳答案

您正在使用构造函数 B(int i) 创建 B 的实例。

该构造函数首先执行父类(super class)构造函数public A()。此构造函数调用 test(),该函数在 B 类中被重写,并打印类 Bi 变量。

该变量尚未初始化,因为父类(super class)的构造函数是在 B 的实例变量初始化之前执行的。因此,它仍然包含默认值0

构造函数 public A() 完成后,B 的实例变量被初始化(因此 i 被初始化为 1),并且执行B的构造函数主体。它调用 test(),现在打印 1

关于java - 为什么继承抽象类时执行结果不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60798542/

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