Variablenverstecken in Java
Bei der Untersuchung des Überschreibens von Mitgliedsfunktionen in Java entstand die Neugier auf die Möglichkeit, Mitgliedsvariablen zu überschreiben. Betrachten Sie zur Untersuchung den folgenden Code:
public class A { public int intVal = 1; public void identifyClass() { System.out.println("I am class A"); } } public class B extends A { public int intVal = 2; public void identifyClass() { System.out.println("I am class B"); } } public class MainClass { public static void main(String[] args) { A a = new A(); B b = new B(); A aRef; aRef = a; System.out.println(aRef.intVal); // Prints 1 aRef.identifyClass(); // Prints "I am class A" aRef = b; System.out.println(aRef.intVal); // Prints 1 aRef.identifyClass(); // Prints "I am class B" } }
Die Ausgabe lautet:
1 I am class A 1 I am class B
Der Code initialisiert zwei Klassen, A und B, beide mit einer Mitgliedsvariablen namens intVal. B erweitert A und deklariert die Mitgliedsvariable intVal neu. Wenn die Referenzvariable aRef auf eine Instanz von A festgelegt ist, wird korrekt auf die Mitgliedsvariable intVal zugegriffen. Wenn aRef jedoch auf eine Instanz von B gesetzt ist, gibt die Mitgliedsvariable intVal weiterhin den in der Klasse A gespeicherten Wert aus.
Warum passiert das?
Ausblenden der Mitgliedsvariablen
In dieser Situation überschreibt die Mitgliedsvariable intVal in der B-Klasse nicht die Mitgliedsvariable intVal in der A-Klasse Klasse. Stattdessen ist die Variable versteckt. Wenn eine Variable ausgeblendet ist, enthält die Unterklasse sowohl die ursprüngliche Eigenschaft der Oberklasse als auch eine neue Eigenschaft mit demselben Namen.
Um auf die ursprüngliche Mitgliedsvariable der Oberklasse zuzugreifen, können Sie super.var oder (( SuperClass)this).var-Syntax. Zum Beispiel:
// Access the original intVal member variable from the A class System.out.println(aRef.intVal); // Use super to access the original intVal member variable System.out.println(aRef.super.intVal);
Es ist wichtig zu beachten, dass versteckte Variablen nicht vom gleichen Typ sein müssen. Sie haben innerhalb der Unterklasse einfach denselben Namen. Dadurch können Sie verschiedene Implementierungen derselben Eigenschaft für verschiedene Unterklassen erstellen und so Flexibilität und Wiederverwendbarkeit des Codes gewährleisten.
Das obige ist der detaillierte Inhalt vonKönnen Java-Unterklassen Mitgliedsvariablen überschreiben oder verbergen sie diese einfach?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!