引用类型和对象类型更改Java

Eri*_*c T 9 java reference object

鉴于:

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 {}
Run Code Online (Sandbox Code Playgroud)

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

A.参考类型是Z; 对象类型是Z.

B.参考类型是Y; 对象类型是Y.

C.参考类型是Z; 对象类型是Y.

D.参考类型是X; 对象类型是Z.

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

任何人都可以详细说明参考类型可能是什么以及为什么?

谢谢.

das*_*ght 5

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

Z myZ = ...
Run Code Online (Sandbox Code Playgroud)

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

  • 引用声明了对象的接口。如果类型 X 有方法 getA()、getB() 和 getC()。而类型 Y 只有 getA() 和 getB(),那么通过将接口(引用类型)从 X 更改为 Y,即使对象的类型为 X,也只能访问 getA() 和 getB()。 (2认同)