在上述最初的代码基础上,如果删除`Innerclass`中成员变量`int a = 200;`,并保持其他代码不变,执行`example.test()`,控制台输出将会是什么?

答案解析

当删除内部类`Innerclass`中的成员变量`int a = 200;`后,在`test()`方法中创建`Innerclass`的实例`ic`后,当访问`ic.a`时,会发生名称遮蔽,访问到的是外部类`Example4_17`的成员变量`a`。因为`example`的构造方法传入了400,所以 `ic.a`会先输出400。在`print()`方法中,`Example4_17.this.a`首先修改了外部类成员变量`a`为300,之后又输出这个修改后的`a`的值。故最终的输出结果是`ic.a=400`, `Innerclass.b=100` 和 `Example4_17.this.a=300`。选项 B 和 C 错误,访问 `ic.a`时会发生名称遮蔽。选项 D 错误, 外部类 a 的值在 `print()`中修改。
正确答案:A
随机推荐
开始刷题