Vererbung und Ausgabe

Status
Nicht offen für weitere Antworten.

Lenzen

Aktives Mitglied
Hallo!
Ich habe eine Frage bezüglich einer Ausgabe.

Hier der Code:
Code:
class Q{
	int x=3;
	public String toString(){
		return "Q";
	}
}
class K extends Q{
	int x=1;
	public String toString(){
		return "K";
	}
}
class P extends K{
	int x=7;	
	P(){
		System.out.println(super.x);
		System.out.println(super.toString());
		System.out.println(((Q)this).x);
		System.out.println(((K)(Q)this).x);
		System.out.println((Q)this);
	}
	public String toString(){
		return "P";
	}
}
public class Test1 {
	public static void main(String[] args) {
		Q q = new P();
	}
}
Ausgabe:
1
K
3
1
P

Jetzt meine Frage: Warum wird in der letzten Ausgabe die toString Methode der Klasse P aufgerufen? Bis jetzt habe ich keine Erklärung dafür gefunden. Vielleicht kann jemand helfen???
 
B

Beni

Gast
Weil "this" ein P und kein Q ist. Daran ändert auch der Cast nichts. "this" ist ein Zeiger auf ein P-Objekt, es ist wie bei einem Wegweiser: nur weil man ihm eine andere Farbe gibt, zeigt er nicht plötzlich in eine andere Richtung.
 

Lenzen

Aktives Mitglied
Danke, das hilft schon weiter.
Das ganze verhält sich aber bei Feldern, also Variablen (wie x) etwas anders, wenn ich das richtig sehe. Oder?
 
B

Beni

Gast
Richtig. Methoden kann man überschreiben (also richtig ersetzen durch neue Methoden), Felder kann man höchstens "verstecken" (durch einen Cast hat man immernoch Zugriff).
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben