我试图理解 Java 继承中方法重写、构造函数调用和变量隐藏的行为。我有以下代码
class Base {
int id = 1000; //Line n1
Base() {
Base(); //Line n2
}
void Base() { //Line n3
System.out.println(++id); //Line n4
}
}
class Derived extends Base {
int id = 2000; //Line n5
Derived() {} //Line n6
void Base() { //Line n7
System.out.println(--id); //Line n8
}
}
public class Test {
public static void main(String[] args) {
Base base = new Derived(); //Line n9
}
}
当我运行此代码时,它输出-1。
我理解Derived扩展了Base,并且两个类都有一个id 变量和一个Base() 方法。顺序如下
- 调用 Derived 的构造函数
- 调用Base的构造函数
- 调用Base()方法,由于方法重写,执行子类中的方法。
因此,我认为结果将是 1001。