9

鉴于:

public class X implements Z {

    public String toString() { return "I am X"; }

    public static void main(String[] args) {
        Y myY = new Y();
        X myX = myY;
        Z myZ = myX;
        System.out.println(myZ);
    }
}

class Y extends X {

    public String toString() { return "I am Y"; }
}

interface Z {}

myZ 的引用类型是什么,它引用的对象的类型是什么?

A、参考类型为Z;对象类型为 Z。

B、参考类型为Y;对象类型为 Y。

C、参考类型为Z;对象类型为 Y。

D. 引用类型为X;对象类型为 Z。

在这种情况下,我知道对象类型肯定是 Y,因为我可以使用 .getClass() 方法对其进行测试。但我不确定如何检查引用类型是什么。我假设它是 Z,但这个假设是基于直觉而不是逻辑。

谁能详细说明参考类型可能是什么以及为什么?

谢谢你。

4

4 回答 4

4

对象引用的类型在其声明时静态定义:

Z myZ = ...

因此,引用的类型是Z,所以“C”应该是正确的答案。

于 2012-12-20T14:08:13.927 回答
2

对象是用创建的,new Y();所以对象类型是Y

myZ被声明为Z( Z myZ = ...;) 所以引用类型是Z

因此,正确答案是C

于 2012-12-20T14:09:59.997 回答
0

对象被引用到 Z 类型

Z myZ = myX;

但最初它是作为 Y 型创建的,

Y myY = new Y();

因此,ans 显然是 C。

于 2013-10-06T08:01:15.603 回答
0

我知道这很令人困惑,因为错误的答案被标记为正确的答案;我也遇到过。事实是,正如他们所说,引用是 Z 类型,对象类型是 Y,所以 C 是正确答案。

于 2013-12-10T13:33:13.670 回答