Variablenausblenden tritt auf, wenn eine Unterklasse eine Mitgliedsvariable mit demselben Namen wie eine Mitgliedsvariable in ihrer Oberklasse definiert. Im Gegensatz zum Überschreiben von Funktionen, das die Implementierung ersetzt, verdeckt das Ausblenden von Variablen die Superklassenvariable durch eine neue Variable mit demselben Namen.
Bedenken Sie den folgenden Java-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); aRef.identifyClass(); aRef = b; System.out.println(aRef.intVal); aRef.identifyClass(); } }
Ausgabe:
1 I am class A 1 I am class B
In diesem Beispiel ist die intVal-Variable sowohl in der A- als auch in der B-Klasse definiert. Die Mitgliedsvariable von B verbirgt die Variable von A. Wenn also aRef auf b gesetzt ist, ist der intVal-Wert, auf den zugegriffen wird, immer noch 1, was der Standardwert von A's intVal ist.
Um auf die ausgeblendete Variable zuzugreifen der Superklasse können wir super.var oder ((SuperClass)this).var verwenden. Zum Beispiel:
aRef = b; System.out.println(aRef.intVal); // Outputs 1, the value of A's intVal System.out.println(((A)aRef).intVal); // Outputs 2, the value of B's intVal
Indem wir aRef explizit in seine Oberklasse umwandeln, können wir auf die ausgeblendete Mitgliedsvariable zugreifen.
Denken Sie daran, dass das Ausblenden von Variablen es Unterklassen ermöglicht, ihre eigenen Variablen mit denselben Namen zu definieren Superklassenvariablen, überschreibt diese jedoch nicht vollständig. Beide Variablen existieren nebeneinander und die Unterklassenvariable überschattet die Oberklassenvariable.
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich das Ausblenden von Variablen in Java vom Überschreiben von Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!