2012-12-20 4 views
9

Dane:referencyjny i Typ obiektu Zmiana listy Java

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

Jaki jest typ referencyjny MYZ i jaki jest typ obiektu jest wykorzystywana?

A. Typem odniesienia jest Z; typ obiektu to Z.

B. Typem odniesienia jest Y; typ obiektu to Y.

C. Typ odniesienia to Z; typ obiektu to Y.

D. Typem odniesienia jest X; typ obiektu to Z.

W tej sytuacji wiem, że typ obiektu to na pewno Y, ponieważ mogę go przetestować za pomocą metody .getClass(). Ale nie jestem pewien, jak sprawdzić, jaki jest typ referencyjny. Zakładam, że to Z, ale to założenie opiera się na uczuciu, a nie logice.

Czy każdy może opracować, jaki może być typ odniesienia i dlaczego?

Dziękuję.

+0

Poszedłbym z C, obiekt został utworzony z nowym Y(); i myZ jest zadeklarowane jako Z –

Odpowiedz

4

Rodzaj obiektu odniesienia jest zdefiniowany statycznie w momencie jej deklaracji:

Z myZ = ... 

Dlatego typ odniesienia jest Z, więc „C” powinna być prawidłowa odpowiedź.

+0

jakie jest znaczenie ogólnego "typu odniesienia"? Dlaczego tego potrzebujemy? –

+2

Odwołanie deklaruje interfejs obiektu. jeśli typ X miał metody getA(), getB() i getC(). Typ Y ma tylko getA() i getB(), a następnie zmieniając interfejs (typ odniesienia) z X na Y, można uzyskać dostęp tylko do getA() i getB(), nawet jeśli obiekt jest typu X. – NickL

2

obiekt został utworzony z new Y(); więc typ obiektu Y

myZ został uznany Z (Z myZ = ...;), więc typ odniesienia Z

Dlatego dobrym rozwiązaniem jest C

0

Obiekt odnosi się do typu Z

Z myZ = myX; 

ale pierwotnie został stworzony jako typ Y,

Y myY = new Y(); 

Stąd ans jest oczywiście C.

0

wiem, że to jest kłopotliwe ze względu na złą odpowiedź, która jest oznaczona jako prawdziwa; Ja też to poznałem. Prawda jest taka, jak mówią, odniesienie jest typu Z, a typem obiektu jest Y, więc C jest poprawną odpowiedzią.