Heim >Java >javaLernprogramm >Warum druckt meine Java-Unterklasse die statische Variable der übergeordneten Klasse anstelle ihrer eigenen?
Überschreiben von Klassenvariablen in Java: Ein verborgenes Geheimnis
Die Frage ergibt sich aus einem faszinierenden Codeausschnitt, der sich um eine Klassenhierarchie dreht, insbesondere um eine übergeordnete Klasse namens „Dad“ und ihre untergeordnete Klasse „Son“. Beide Klassen besitzen eine Klassenvariable namens me, die ihre Identität darstellen soll. Das Problem tritt jedoch auf, wenn die doIt()-Methode, die ein Son-Objekt instanziiert und dessen printMe()-Methode aufruft, „dad“ anstelle des erwarteten „son“ ausgibt.
Can Class Variables Be Überschrieben?
Um diese Frage zu beantworten, beschäftigen wir uns mit dem Konzept der Vererbung und des Überschreibens in Java. Überschreiben bezieht sich auf die Fähigkeit einer Unterklasse, das Verhalten einer in ihrer Oberklasse definierten Methode zu ändern. Dieses Konzept erstreckt sich jedoch nicht auf Klassenvariablen.
Ausblenden vs. Überschreiben
Bei Klassenvariablen geschieht kein Überschreiben, sondern eher ein „Ausblenden“. " Wenn eine Unterklasse eine Klassenvariable mit demselben Namen wie eine in ihrer Oberklasse deklariert, verbirgt sie die geerbte Variable, anstatt sie zu ersetzen. Die ausgeblendete Variable wird effektiv aus der Sicht innerhalb der Unterklasse ausgeblendet.
Der verborgene Wert
Um auf das Beispiel zurückzukommen: Die Deklaration von „me“ in „Son“ verbirgt die von „me“ geerbte Variable Papa. Die versteckte Variable in Dad behält jedoch ihren Wert „dad“ und ist diejenige, auf die in der printMe()-Methode zugegriffen und diese gedruckt wird.
Alternative Lösung
Um das gewünschte Ergebnis der Ausgabe von „son“ zu erzielen, besteht ein alternativer Ansatz darin, Instanzvariablen (nicht statische Variablen) zu verwenden, die im Konstruktor der untergeordneten Klasse definiert sind. Diese Methode ermöglicht es der Unterklasse, ihre eigene eindeutige Identität zu haben, ohne die Klassenvariable ihrer Oberklasse zu beeinflussen.
Schlussfolgerung
Im Wesentlichen gibt es keinen direkten Mechanismus zum Überschreiben der Klasse Variablen in Java. Die Beziehung zwischen einer Unterklasse und ihrer Oberklasse beinhaltet Verstecken und Vererben, sodass die Unterklasse ihre eigenen einzigartigen Eigenschaften haben kann, ohne die ursprünglichen Werte der übergeordneten Klasse zu ändern. In Fällen, in denen eindeutige Identitäten gewünscht sind, bietet die Verwendung von Instanzvariablen eine geeignetere Lösung.
Das obige ist der detaillierte Inhalt vonWarum druckt meine Java-Unterklasse die statische Variable der übergeordneten Klasse anstelle ihrer eigenen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!