Heim >Java >javaLernprogramm >Können Java-Unterklassen Mitgliedsvariablen überschreiben oder verbergen sie diese einfach?

Können Java-Unterklassen Mitgliedsvariablen überschreiben oder verbergen sie diese einfach?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-19 22:15:09591Durchsuche

Can Java Subclasses Override Member Variables, or Do They Just Hide Them?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn