Mögliche Duplizieren:
The concept of shadowingWie behandelt Java Felder beim Upcasting?
Ich bin verwirrt darüber, wie die Felder von Klassen behandelt werden in Java während Upcasting. Zum Beispiel:
class SuperClass
{
String myString = "String in SuperClass";
public void myMethod()
{
System.out.println("Method in SuperClass");
}
}
class SubClass extends SuperClass
{
String myString = "String in SubClass";
public void myMethod()
{
System.out.println("Method in SubClass");
}
}
class Question
{
public static void main(String[] args)
{
SuperClass test = new SubClass();
// object test is an instance of SubClass
// but I am telling the compiler to treat it as SuperClass
test.myMethod();
System.out.println(test.myString);
}
}
Ausgang:
Method in SubClass
String in SuperClass //Why is "String in SubClass" not used?
Wenn ich ein test
Objekt erstellen sie eine Instanz von SubClass
Klasse ist; Ich rate dem Compiler jedoch, es als SuperClass
zu behandeln. Für die Methodenarbeit ist mir alles klar: Ich kann nur die Methoden der SubClass
verwenden, wenn eine bestimmte Methode für SuperClass
definiert ist.
Allerdings bin ich verloren, warum ein Feld von SuperClass
verwendet wird, wenn ich versuche, auf myString
von test
zuzugreifen. Da test
eine Instanz von SubClass
ist, würde ich erwarten, myString
definiert in SubClass
verwendet werden, warum ist das nicht passiert? Was vermisse ich?
Ich weiß, dass ich zugreifen kann, myString von SubClass
mit this
Operator. Zum Beispiel könnte ich printMyString
Methode in Superklasse definieren und überschreiben sie mit
public void printMyString()
{
System.out.println(this.myString);
}
Im SubClass
, so meine Frage vor allem darum, wie kommt das Feld der SuperClass
in test
verwendet wird. Vielleicht fehlt mir etwas Offensichtliches?
Ich habe versucht, nach der Antwort zu suchen, und das nächste Thema, das ich fand, war Upcasting in Java and two separate object properties, obwohl hilfreich, beantwortete es meine Frage nicht.
Vielen Dank im Voraus
gute Frage @Akavall –