Java Kovariante Rückgabetyp

8

Warum gibt der untere Code "1" aus?

%Vor%     
kris979 26.05.2011, 10:36
quelle

3 Antworten

13

Weil Sie sich auf Felder beziehen, die nicht von Polymorphie betroffen sind. Wenn Sie stattdessen getX() verwendet hätten, hätte 2 zurückgegeben.

Sie fragen nach dem Wert des Feldes x , das in der Klasse A definiert ist (weil Base.getObject() A zurückgibt). Auch wenn CovariantReturn die Methode, die B zurückgibt, überschreibt, verweisen Sie nicht auf Ihr Objekt als CovariantReturn .

Um ein wenig darüber zu erweitern, wie Felder von Polymorphie nicht beeinflusst werden - Feldzugriff wird zur Kompilierzeit realisiert, also was auch immer der Compiler sieht, darauf wird zugegriffen. In Ihrem Fall definiert die Methode, dass A zurückgegeben wird und auf A.x zugegriffen wird. Auf der anderen Seite werden Methoden basierend auf dem Laufzeittyp aufgerufen. Selbst wenn Sie definieren, dass A zurückgegeben wird, aber eine Instanz von B zurückgegeben wird, wird die Methode, die Sie aufrufen, auf B aufgerufen.

    
Bozho 26.05.2011 10:39
quelle
0

@ kris979 Obwohl Sie B zurückgeben, denke ich, was den Unterschied ausmacht, ist, dass der Rückgabetyp aus A besteht. Daher wird der Wert von x in A, d. h. 1, gedruckt.

    
Ashish K Agarwal 26.05.2011 10:47
quelle
0

Wie Bozho darauf hingewiesen hat - die Instanzvariable wird niemals von Polymorphie beeinflusst. Lassen Sie mich Ihnen ein kleines Beispiel geben.

%Vor%

Dieser Code wird gedruckt - in sub und 1

    
RishikeshDhokare 08.01.2013 19:16
quelle

Tags und Links