请参考下面的Java代码:
class Base{
Base(){
System.out.println("Base Constructor");
method();
}
void method(){}
}
class Derived extends Base{
int var = 2;
Derived(){
System.out.println("Derived Constructor");
}
@Override
void method(){
System.out.println("var = "+var);
}
}
class Test2{
public static void main(String[] args) {
Derived b = new Derived();
}
}
Run Code Online (Sandbox Code Playgroud)
看到的输出是:
Base Constructor
var = 0
Derived Constructor
Run Code Online (Sandbox Code Playgroud)
我认为var = 0的发生是因为Derived对象是半初始化的; 类似于Jon Skeet在这里所说的
我的问题是:
如果尚未创建Derived类对象,为什么会调用重写的方法?
在什么时间点,var赋值为0?
是否存在需要此类行为的用例?
我有这个出现在测验中的代码
public class Main {
public static void main(String[] args) {
class b {
int i = 32;
b() { b(); }
void b() { System.out.println(++i); }
}
class d extends b {
int i = 8;
d() {}
void b() { System.out.println(--i); }
}
b b = new d();
}
}
Run Code Online (Sandbox Code Playgroud)
输出应该是什么?原来答案是-1,而我预计它是7。java 坏了吗?