我有这个出现在测验中的代码
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 坏了吗?
Ani*_*wat 14
让我们来看看执行顺序:
new d()创建 的对象之前d,它需要调用super()。b。b将调用该方法,b但由于class 中有一个可用的覆盖方法d,它将被调用。b尚未创建的实例,并且 的值i是隐藏的(d.i隐藏b.i),因此 的值i是0。这样做--i生成-1作为输出。| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |