变量多态性中的初始化
2022-09-04 19:32:50
假设您有以下代码
class A {
int i = 4;
A() {
print();
}
void print () {
System.out.println("A");
}
}
class B extends A {
int i = 2; //"this line"
public static void main(String[] args){
A a = new B();
a.print();
}
void print () {
System.out.println(i);
}
}
这将打印 0 2
现在,如果您删除标有“此行”的行,代码将打印 4 4
- 我明白,如果没有int i=2;线
A a = new B();
将调用类 A,将 i 初始化为 4,调用构造函数,
将控制权交给 中的方法,最后打印 4。print()
class B
a.print()
将调用类 B 中的方法,因为这些方法将在运行时绑定,运行时还将使用在类 A, 4 中定义的值。print()
(当然,如果我的推理有任何错误,请告诉我)
- 但是,我不明白的是是否有int i = 2。
为什么如果你插入代码,第一部分(创建对象)会突然打印0而不是4?为什么它没有将变量初始化为 i=4,而是分配默认值?