Variablen- und Methodenverstecken in Java

1. Einleitung

In diesem Tutorial lernen wir, wie sich Variablen und Methoden in der Java-Sprache verstecken .

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 Code wie Methoden, Konstruktoren, in einem beliebigen Codeblock mit geschweiften Klammern
  • Instanzvariablen - innerhalb einer Klasse definiert und gehören zur Instanz des Objekts
  • Klasse oder statische Variablen - werden in der Klasse mit dem Schlüsselwort static deklariert. Sie haben einen Klassenbereich.

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

2.1. Die Kraft des Lokalen

Werfen wir einen Blick auf die HideVariable- Klasse:

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 Nachrichtenvariable an 4 verschiedenen Stellen deklariert. Die im Konstruktor deklarierten lokalen Variablen und die beiden Methoden schattieren 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 lautet:

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 dieses Schlüsselwort verwenden, wie es in der printInstanceVariable () -Methode 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 untergeordneten Variablen 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 untergeordnete Klasse:

public class ChildVariable extends ParentVariable { String instanceVariable = "child variable"; public void printInstanceVariable() { System.out.println(instanceVariable); } }

Zum Testen initialisieren wir zwei Instanzen. Rufen Sie eine mit der übergeordneten Klasse und eine mit dem Kind auf und rufen Sie dann die printInstanceVariable () -Methoden für jede von ihnen auf:

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

Die Ausgabe zeigt das Ausblenden der Eigenschaft:

parent variable child variable

In den meisten Fällen sollten wir vermeiden, Variablen in übergeordneten und untergeordneten Klassen mit demselben Namen zu erstellen . Stattdessen sollten wir einen geeigneten Zugriffsmodifikator wie private verwenden und zu diesem Zweck Getter / Setter-Methoden bereitstellen.

3. Methodenverstecken

Das Ausblenden von Methoden kann in jeder Hierarchiestruktur in Java auftreten. Wenn eine untergeordnete Klasse eine statische Methode mit derselben Signatur wie eine statische Methode in der übergeordneten Klasse definiert, verbirgt die Methode des Kindes die in der übergeordneten Klasse. Um mehr über das statische Schlüsselwort zu erfahren , ist dieses Schreiben ein guter Anfang.

Das gleiche Verhalten bei den Instanzmethoden wird als Methodenüberschreibung bezeichnet. Weitere Informationen zum Überschreiben von Methoden finden Sie in unserem Handbuch hier.

Schauen wir uns nun dieses praktische Beispiel an:

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

BaseMethodClass verfügt über eine einzelne statische printMessage () -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 der printMessage () -Methode:

child static method

Die ChildMethodClass.printMessage () verbirgt die Methode in BaseMethodClass .

3.1. Methodenverstecken vs Überschreiben

Das Ausblenden funktioniert nicht wie das Überschreiben, da statische Methoden nicht polymorph sind. Das Überschreiben erfolgt nur mit Instanzmethoden. Es unterstützt die späte Bindung, sodass zur Laufzeit festgelegt wird, welche Methode aufgerufen wird.

Auf der anderen Seite funktioniert das Ausblenden von Methoden mit statischen. Daher wird es zur Kompilierungszeit festgelegt .

4. Fazit

In diesem Artikel haben wir uns mit dem Konzept des Versteckens von Methoden und Variablen in Java befasst . Wir haben verschiedene Szenarien des variablen Versteckens und Abschattens gezeigt. Das wichtige Highlight des Artikels ist auch der Vergleich der Methode zum Überschreiben und Ausblenden.

Wie üblich ist der vollständige Code auf GitHub verfügbar.