考虑以下Java代码片段,其中`Example4_17`类包含一个成员内部类`Innerclass`。在`Example4_17`类的`test()`方法中,创建一个`Innerclass`实例并调用其`print()`方法。如果`Example4_17`类的实例`example`通过`Example4_17 example = new Example4_17(400)`创建,并且执行`example.test()`,控制台将输出什么?
答案解析
首先,`Example4_17`的构造方法`Example4_17(int a)`会将实例变量`a`初始化为400。在`test()`方法中,创建`Innerclass`的实例`ic`时,`ic.a`访问的是内部类`Innerclass`自身的成员变量`a`,其值为200。内部类的`print()`方法首先打印`Innerclass.b`,其值为100。接着,`Example4_17.this.a = 300` 将外部类`Example4_17`的实例变量`a`的值修改为300,并在之后输出 `Example4_17.this.a`, 因此输出的是被修改后的值。因此,正确的输出是`ic.a=200`, `Innerclass.b=100` 和 `Example4_17.this.a=300`。
选项 A 错误,`ic.a`应为内部类的 `a`,不是外部类的。 选项 B 错误, `Example4_17.this.a` 的输出是修改之后的值。选项 D 错误, ic.a应为内部类的 `a`,不是外部类的,且外部类的`a`值在print()方法内修改了
正确答案:C