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

引用类型和对象类型更改Java,java,object,reference,Java,Object,Reference,鉴于: myZ的引用类型是什么?它引用的对象的类型是什么 A.参考类型为Z;对象类型为Z B.参考类型为Y;对象类型为Y C.参考类型为Z;对象类型为Y D.参考类型为X;对象类型为Z 在这种情况下,我知道对象类型肯定是Y,因为我可以用.getClass()方法测试它。但我不确定如何检查引用类型。我假设它是Z,但这个假设是基于直觉,而不是逻辑 有人能详细说明引用类型可能是什么以及为什么吗 谢谢。对象引用的类型是在其声明点静态定义的: public class X implements Z {

鉴于:

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

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

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

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

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

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

有人能详细说明引用类型可能是什么以及为什么吗


谢谢。

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

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 {}

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

对象是使用
new Y()创建的因此对象类型为
Y

myZ
被声明为
Z
Z myZ=…;
),因此引用类型为
Z


因此,正确的答案是C

对象引用到Z类型

Z myZ = ...
但最初它被创建为Y型

Z myZ = myX;

因此,ans显然是C。

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

我会选择C,对象是用新的Y()创建的;myZ被声明为zcode>引用类型的总体含义是什么?为什么我们需要它?引用声明了对象的接口。如果类型X有方法getA()、getB()和getC()。并且类型Y只有getA()和getB(),那么通过将接口(引用类型)从X更改为Y,即使对象的类型是X,也只能访问getA()和getB()。
Y myY = new Y();