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です。

この状況では、.getClass()メソッドを使用してテストできるため、オブジェクトタイプは確かにYであることがわかります。しかし、参照型が何であるかを確認する方法がわかりません。私はそれがZであると仮定していますが、その仮定は論理ではなく腸の感覚に基づいています。

誰かが参照タイプが何であるか、そしてその理由について詳しく説明できますか?

ありがとうございました。

4

4 に答える 4

4

オブジェクト参照のタイプは、その宣言の時点で静的に定義されます。

Z myZ = ...

したがって、参照のタイプはです。したがって、Z「C」が正解です。

于 2012-12-20T14:08:13.927 に答える
2

オブジェクトはで作成されたnew Y();ため、オブジェクトタイプはY

myZZ( )として宣言された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 に答える