给定如下类定义: `class Parent { public int value = 10; public void display() { System.out.println("Parent value: " + value); } } class Child extends Parent { public int value = 20; @Override public void display() { System.out.println("Child value: " + value); } } `,以及以下代码: `Parent obj = new Child(); System.out.println(obj.value); obj.display(); `。请问这段代码的输出是什么?

答案解析

此题考察了继承、成员变量覆盖以及方法覆盖的概念。当使用`Parent obj = new Child();`创建对象时,`obj` 的静态类型是 `Parent`,但是实际类型是 `Child`。成员变量的访问是基于静态类型的,所以 `obj.value` 输出的是 `Parent` 类中的 `value` 值,即 10。而方法调用是基于实际类型(运行时类型)的,因为 `Child` 类覆写了 `display()` 方法,所以调用 `obj.display()` 时会执行 `Child` 类中的 `display()` 方法,输出 `Child value: 20`。因此,正确的输出是先输出 10, 然后输出 Child value: 20. 选项C 正确,A,B,D 混淆了静态类型和实际类型对成员访问的影响.
正确答案:C
随机推荐
开始刷题