Skrývanie premenných a metód v Jave

1. Úvod

V tomto návode sa dozvieme o premenných a metódach skrývajúcich sa v jazyku Java.

Najskôr pochopíme koncept a účel každého z týchto scenárov. Potom sa ponoríme do prípadov použitia a preskúmame rôzne príklady.

2. Variabilné skrývanie

Skrytie premennej nastane, keď deklarujeme vlastnosť v miestnom rozsahu, ktorý má rovnaký názov ako ten, ktorý už máme vo vonkajšom rozsahu.

Predtým, ako sa presunieme k príkladom, v krátkosti si pripomeňme možné rozsahy premenných v prostredí Java. Môžeme ich definovať pomocou nasledujúcich kategórií:

  • lokálne premenné - deklarované v časti kódu, ako sú metódy, konštruktory, v ľubovoľnom bloku kódu so zloženými zátvorkami
  • premenné inštancie - sú definované vo vnútri triedy a patria do inštancie objektu
  • triedy príp statický premenné - sú deklarované v triede s statický kľúčové slovo. Majú rozsah na úrovni triedy.

Teraz si popíšme schovanie s príkladmi pre každú jednotlivú kategóriu premenných.

2.1. Sila miestnych

Poďme sa pozrieť na HideVariable trieda:

verejná trieda HideVariable {private String message = "toto je premenná inštancie"; HideVariable () {String message = "lokálna premenná konštruktora"; System.out.println (správa); } public void printLocalVariable () {String message = "metóda lokálnej premennej"; System.out.println (správa); } public void printInstanceVariable () {String message = "miestna premenná metódy"; System.out.println (this.message); }}

Tu máme správa premenná deklarovaná na 4 rôznych miestach. Lokálne premenné deklarované vo vnútri konštruktora a tieto dve metódy tieňujú inštančnú premennú.

Vyskúšajme inicializáciu objektu a volanie metód:

Premenná HideVariable = nová HideVariable (); variable.printLocalVariable (); variable.printInstanceVariable ();

Výstup vyššie uvedeného kódu je:

konštruktor lokálna premenná metóda lokálna premenná toto je inštančná premenná

Tu prvé 2 volania načítajú lokálne premenné.

Na prístup k premennej inštancie z lokálneho rozsahu môžeme použiť toto kľúčové slovo, ako je zobrazené v printInstanceVariable () metóda.

2.2. Skrývanie sa a hierarchia

Podobne, keď trieda dieťaťa aj rodiča majú premennú s rovnakým názvom, premenná dieťaťa skryje tú z rodičovskej.

Predpokladajme, že máme nadradenú triedu:

verejná trieda ParentVariable {String instanceVariable = "rodičovská premenná"; public void printInstanceVariable () {System.out.println (instanceVariable); }}

Potom definujeme podradenú triedu:

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

Aby sme to otestovali, inicializujme dve inštancie. Jeden s triedou rodiča a druhý s dieťaťom, potom vyvolať znak printInstanceVariable () metódy pre každú z nich:

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

Výstup zobrazuje vlastnosť, ktorá sa skrýva:

nadradená premenná podradená premenná

Vo väčšine prípadov by sme sa mali vyhnúť vytváraniu premenných s rovnakým názvom v triedach rodičov aj detí. Namiesto toho by sme mali použiť vhodný modifikátor prístupu ako súkromné a na tento účel poskytnúť metódy getra / setra.

3. Skrývanie metód

Skrytie metódy sa môže stať v ľubovoľnej štruktúre hierarchie v Jave. Keď podradená trieda definuje statickú metódu s rovnakým podpisom ako statická metóda v nadradenej triede, potom detská metóda skrýva sa ten v rodičovskej triede. Ak sa chcete dozvedieť viac o statický Toto kľúčové slovo je dobré začať.

Rovnaké správanie zahŕňajúce inštančné metódy sa nazýva prepisovanie metód. Ak sa chcete dozvedieť viac o prepísaní metód, pozrite si nášho sprievodcu tu.

Poďme sa teraz pozrieť na tento praktický príklad:

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

BaseMethodClass má singel printMessage () statická metóda.

Ďalej vytvoríme podradenú triedu s rovnakým podpisom ako v základnej triede:

verejná trieda ChildMethodClass rozširuje BaseMethodClass {public static void printMessage () {System.out.println ("detská statická metóda"); }}

Funguje to takto:

ChildMethodClass.printMessage ();

Výstup po volaní súboru printMessage () metóda:

detská statická metóda

The ChildMethodClass.printMessage () skryje metódu v BaseMethodClass.

3.1. Skrývanie metód a prepísanie

Skrytie nefunguje ako prepísanie, pretože statické metódy nie sú polymorfné. K prepísaniu dôjde iba pri inštančných metódach. Podporuje neskorú väzbu, takže ktorá metóda sa bude volať, je určená za behu programu.

Na druhej strane, skrývanie metód pracuje so statickými. Preto je určený v čase kompilácie.

4. Záver

V tomto článku sme si prešli koncepciu skrývania metód a premenných v Jave. Ukázali sme rôzne scenáre premenného skrývania a tieňovania. Dôležitým vrcholom článku je tiež porovnanie spôsobu prepísania a skrytia.

Celý kód je ako obvykle k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found