Variabele en methode verbergen in Java

1. Inleiding

In deze tutorial we gaan leren over het verbergen van variabelen en methoden in de Java-taal.

Eerst zullen we het concept en het doel van elk van deze scenario's begrijpen. Daarna duiken we in de use-cases en bekijken we verschillende voorbeelden.

2. Variabele verbergen

Variabele verbergen gebeurt wanneer we een eigenschap in een lokale scope declareren die dezelfde naam heeft als degene die we al in de buitenste scope hebben.

Laten we, voordat we naar de voorbeelden springen, kort de mogelijke variabele scopes in Java samenvatten. We kunnen ze definiëren met de volgende categorieën:

  • lokale variabelen - gedeclareerd in een stuk code, zoals methoden, constructors, in elk codeblok met accolades
  • instantievariabelen - gedefinieerd binnen een klasse en behoren tot de instantie van het object
  • klasse of statisch variabelen - worden in de klasse gedeclareerd met de statisch trefwoord. Ze hebben een bereik op klasniveau.

Laten we nu het verbergen beschrijven met voorbeelden, voor elke afzonderlijke categorie variabelen.

2.1. De kracht van lokaal

Laten we eens kijken naar de VerbergVariabele klasse:

openbare klasse HideVariable {private String message = "dit is een instantievariabele"; HideVariable () {String message = "lokale constructorvariabele"; System.out.println (bericht); } public void printLocalVariable () {String message = "methode lokale variabele"; System.out.println (bericht); } public void printInstanceVariable () {String message = "method local variable"; System.out.println (this.message); }}

Hier hebben we de bericht variabele gedeclareerd op 4 verschillende plaatsen. De lokale variabelen die binnen de constructor zijn gedeclareerd en de twee methoden overschaduwen de instantievariabele.

Laten we de initialisatie van een object testen en de methoden aanroepen:

HideVariable variabele = nieuwe HideVariable (); variabele.printLocalVariable (); variabele.printInstanceVariable ();

De output van de bovenstaande code is:

constructor lokale variabele methode lokale variabele dit is instantievariabele

Hier halen de eerste 2 oproepen de lokale variabelen op.

Om toegang te krijgen tot de instantievariabele vanuit het lokale bereik, kunnen we dit trefwoord zoals het wordt weergegeven in printInstanceVariable () methode.

2.2. Verbergen en de hiërarchie

Evenzo, wanneer zowel de onderliggende als de bovenliggende klassen een variabele met dezelfde naam hebben, verbergt de variabele van het kind die voor de bovenliggende.

Stel dat we de bovenliggende klasse hebben:

openbare klasse ParentVariable {String instanceVariable = "bovenliggende variabele"; openbare ongeldige printInstanceVariable () {System.out.println (instanceVariable); }}

Daarna definiëren we een kindklasse:

openbare klasse ChildVariable breidt ParentVariable {String instanceVariable = "child variable" uit; openbare ongeldige printInstanceVariable () {System.out.println (instanceVariable); }}

Laten we twee instanties initialiseren om het te testen. Een met de bovenliggende klasse en een andere met het kind, en roep vervolgens de printInstanceVariable () methoden op elk van hen:

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

De uitvoer toont het verbergen van de eigenschap:

bovenliggende variabele onderliggende variabele

In de meeste gevallen moeten we het maken van variabelen met dezelfde naam in zowel bovenliggende als onderliggende klassen vermijden. In plaats daarvan zouden we een goede toegangsmodificator moeten gebruiken, zoals privaat en voor dat doel voorzien in getter / setter-methoden.

3. Methode verbergen

Het verbergen van methoden kan plaatsvinden in elke hiërarchiestructuur in java. Als een onderliggende klasse een statische methode definieert met dezelfde handtekening als een statische methode in de bovenliggende klasse, dan is de methode van het kind verbergt die in de bovenliggende klasse. Voor meer informatie over het statisch trefwoord, dit artikel is een goede plek om te beginnen.

Hetzelfde gedrag met betrekking tot de instantiemethoden wordt het overschrijven van methoden genoemd. Voor meer informatie over het overschrijven van methoden, kunt u onze gids hier raadplegen.

Laten we nu eens kijken naar dit praktische voorbeeld:

openbare klasse BaseMethodClass {openbare statische leegte printMessage () {System.out.println ("basis statische methode"); }}

BaseMethodClass heeft een enkele printMessage () statisch methode.

Laten we vervolgens een onderliggende klasse maken met dezelfde handtekening als in de basisklasse:

public class ChildMethodClass breidt BaseMethodClass uit {public static void printMessage () {System.out.println ("child static method"); }}

Dit is hoe het werkt:

ChildMethodClass.printMessage ();

De uitvoer na het aanroepen van het printMessage () methode:

kind statische methode

De ChildMethodClass.printMessage () verbergt de methode in BaseMethodClass.

3.1. Methode verbergen versus overschrijven

Verbergen werkt niet als overschrijven, omdat statische methoden niet polymorf zijn. Overschrijven vindt alleen plaats met instantiemethoden. Het ondersteunt late binding, dus welke methode wordt aangeroepen, wordt tijdens runtime bepaald.

Aan de andere kant werkt methode verbergen met statische methoden. Daarom wordt het bepaald tijdens het compileren.

4. Conclusie

In dit artikel hebben we het concept van het verbergen van methoden en variabelen in Java besproken. We lieten verschillende scenario's zien van variabel verbergen en schaduwen. Het belangrijkste hoogtepunt van het artikel is ook het vergelijken van de methode overschrijven en verbergen.

Zoals gewoonlijk is de volledige code beschikbaar op GitHub.