Variable und Methode, die sich in Java versteckt

Variable und Methode in Java verstecken

1. Einführung

In diesem Tutorial werdenwe’re going to learn about variable and method hiding in the Java language.

Zunächst werden wir das Konzept und den Zweck jedes dieser Szenarien verstehen. Danach werden wir uns mit den Anwendungsfällen befassen und verschiedene Beispiele untersuchen.

2. Variables Verstecken

Das Ausblenden von Variablen erfolgt, wenn wir eine Eigenschaft in einem lokalen Bereich deklarieren, der denselben Namen hat wie die, die wir bereits im äußeren Bereich haben.

Bevor wir zu den Beispielen springen, lassen Sie uns kurz die möglichen Variablenbereiche in Java zusammenfassen. Wir können sie mit den folgenden Kategorien definieren:

  • lokale Variablen - deklariert in einem Codeteil wie Methoden oder Konstruktoren in einem beliebigen Codeblock in geschweiften Klammern

  • Instanzvariablen - innerhalb einer Klasse definiert und gehören zur Instanz des Objekts

  • Klassen- oderstatic-Variablen - werden in der Klasse mit dem Schlüsselwortstaticdeklariert. Sie haben einen Klassenbereich.

Beschreiben wir nun das Verstecken anhand von Beispielen für jede einzelne Kategorie von Variablen.

2.1. Die Kraft des Lokalen

Werfen wir einen Blick auf die KlasseHideVariable:

public class HideVariable {

    private String message = "this is instance variable";

    HideVariable() {
        String message = "constructor local variable";
        System.out.println(message);
    }

    public void printLocalVariable() {
        String message = "method local variable";
        System.out.println(message);
    }

    public void printInstanceVariable() {
        String message = "method local variable";
        System.out.println(this.message);
    }
}

Hier haben wir die Variablemessage an 4 verschiedenen Stellen deklariert. Die im Konstruktor deklarierten lokalen Variablen und die beiden Methoden spiegeln die Instanzvariable.

Testen wir die Initialisierung eines Objekts und rufen die Methoden auf:

HideVariable variable = new HideVariable();
variable.printLocalVariable();

variable.printInstanceVariable();

Die Ausgabe des obigen Codes ist:

constructor local variable
method local variable
this is instance variable

Hier rufen die ersten beiden Aufrufe die lokalen Variablen ab.

Um vom lokalen Bereich aus auf die Instanzvariable zuzugreifen, können Sie das Schlüsselwortthisverwenden, wie es in der MethodeprintInstanceVariable()angezeigt wird.

2.2. Verstecken und die Hierarchie

Wenn sowohl die untergeordnete als auch die übergeordnete Klasse eine Variable mit demselben Namen haben, verbirgt die Variable des Kindes die Variable vor dem übergeordneten Element.

Nehmen wir an, wir haben die Elternklasse:

public class ParentVariable {

    String instanceVariable = "parent variable";

    public void printInstanceVariable() {
        System.out.println(instanceVariable);
    }
}

Danach definieren wir eine Kindklasse:

public class ChildVariable extends ParentVariable {

    String instanceVariable = "child variable";

    public void printInstanceVariable() {
        System.out.println(instanceVariable);
    }
}

Zum Testen initialisieren wir zwei Instanzen. Eine mit der Elternklasse und eine mit dem Kind, rufen Sie dann die MethodenprintInstanceVariable()für jede von ihnen auf:

ParentVariable parentVariable = new ParentVariable();
ParentVariable childVariable = new ChildVariable();

parentVariable.printInstanceVariable();
childVariable.printInstanceVariable();

Die Ausgabe zeigt die Eigenschaft versteckt:

parent variable
child variable

In most cases, we should avoid creating variables with the same name both in parent and child classes. Stattdessen sollten wir einen geeigneten Zugriffsmodifikator wieprivate and verwenden, um Getter / Setter-Methoden für diesen Zweck bereitzustellen.

3. Methodenverstecken

Das Ausblenden von Methoden kann in jeder Hierarchiestruktur in Java vorkommen. Wenn eine untergeordnete Klasse eine statische Methode mit derselben Signatur wie eine statische Methode in der übergeordneten Klasse definiert, ist die untergeordnete Methodehidesdiejenige in der übergeordneten Klasse. Um mehr über das Schlüsselwortstatic zu erfahren,this write-up is a good place to start.

Das gleiche Verhalten bei den Instanzmethoden wird als Überschreiben von Methoden bezeichnet. Um mehr über das Überschreiben von Methoden zu erfahren, überprüfen Sie unsereguide here.

Schauen wir uns nun dieses praktische Beispiel an:

public class BaseMethodClass {

    public static void printMessage() {
        System.out.println("base static method");
    }
}

BaseMethodClass hat eine einzelneprintMessage() static-Methode.

Als Nächstes erstellen wir eine untergeordnete Klasse mit derselben Signatur wie in der Basisklasse:

public class ChildMethodClass extends BaseMethodClass {

    public static void printMessage() {
        System.out.println("child static method");
    }
}

So funktioniert das:

ChildMethodClass.printMessage();

Die Ausgabe nach dem Aufruf derprintMessage()-Methode:

child static method

ChildMethodClass.printMessage() gibt die Methode inBaseMethodClass an.

3.1. Methodenverstecken vs Überschreiben

Das Ausblenden funktioniert nicht wie das Überschreiben, da statische Methoden nicht polymorph sind. Das Überschreiben erfolgt nur bei Instanzmethoden. Es unterstützt das späte Binden. Welche Methode aufgerufen wird, wird zur Laufzeit festgelegt.

On the other hand, method hiding works with static ones. Therefore it’s determined at compile time.

4. Fazit

In this article, we went over the concept of method and variable hiding in Java. Wir haben verschiedene Szenarien des variablen Versteckens und Abschattens gezeigt. Das wichtige Highlight des Artikels ist auch der Vergleich des Überschreibens und Versteckens der Methode.

Wie üblich ist der vollständige Codeover on GitHub verfügbar.