Sakrivanje varijabli i metoda u Javi

1. Uvod

U ovom vodiču, naučit ćemo o skrivanju varijabli i metoda u jeziku Java.

Prvo ćemo razumjeti koncept i svrhu svakog od ovih scenarija. Nakon toga zaronit ćemo u slučajeve upotrebe i ispitati različite primjere.

2. Varijabilno skrivanje

Skrivanje varijable događa se kada deklariramo svojstvo u lokalnom opsegu koji ima isti naziv kao i onaj koji već imamo u vanjskom opsegu.

Prije nego što prijeđemo na primjere, sažeto ćemo prikazati moguće opsege varijabli u Javi. Možemo ih definirati sa sljedećim kategorijama:

  • lokalne varijable - deklarirane u komadu koda kao što su metode, konstruktori, u bilo kojem bloku koda s kovrčavim zagradama
  • varijable instance - definirane unutar klase i pripadaju instanci objekta
  • razred ili statički varijable - deklariraju se u klasi s statički ključna riječ. Imaju opseg na razini klase.

Ajmo sada opisati skrivanje primjerima za svaku pojedinačnu kategoriju varijabli.

2.1. Moć lokalnog

Pogledajmo HideVariable razred:

javna klasa HideVariable {private String message = "ovo je varijabla instance"; HideVariable () {String message = "lokalna varijabla konstruktora"; System.out.println (poruka); } public void printLocalVariable () {String poruka = ​​"lokalna varijabla metode"; System.out.println (poruka); } public void printInstanceVariable () {String message = "lokalna varijabla metode"; System.out.println (this.message); }}

Ovdje imamo poruka varijabla deklarirana na 4 različita mjesta. Lokalne varijable deklarirane unutar konstruktora i dvije metode zasjenjuju varijablu instance.

Isprobajmo inicijalizaciju objekta i pozivanje metoda:

HideVariable varijabla = novo HideVariable (); variable.printLocalVariable (); variable.printInstanceVariable ();

Rezultat gornjeg koda je:

konstruktor metoda lokalne varijable lokalna varijabla ovo je varijabla instance

Ovdje prva dva poziva dohvaćaju lokalne varijable.

Da bismo pristupili varijabli instance iz lokalnog opsega, možemo koristiti ovaj ključna riječ kao što je prikazana u printInstanceVariable () metoda.

2.2. Skrivanje i hijerarhija

Slično tome, kada i dijete i roditeljski razredi imaju varijablu s istim imenom, djetetova varijabla skriva onu od roditelja.

Pretpostavimo da imamo roditeljski razred:

javna klasa ParentVariable {String instanceVariable = "nadređena varijabla"; javna praznina printInstanceVariable () {System.out.println (instanceVariable); }}

Nakon toga definiramo podređeni razred:

javna klasa ChildVariable proširuje ParentVariable {String instanceVariable = "podređena varijabla"; javna praznina printInstanceVariable () {System.out.println (instanceVariable); }}

Da bismo je testirali, pokrenimo dvije instance. Jedan s roditeljskim razredom, a drugi s djetetom, a zatim pozovite printInstanceVariable () metode na svakom od njih:

ParentVariable parentVariable = nova ParentVariable (); ParentVariable childVariable = novo ChildVariable (); parentVariable.printInstanceVariable (); childVariable.printInstanceVariable ();

Izlaz prikazuje skrivanje svojstva:

nadređena varijabla podređena varijabla

U većini slučajeva trebali bismo izbjegavati stvaranje varijabli s istim imenom u roditeljskim i podređenim razredima. Umjesto toga, trebali bismo koristiti odgovarajući modifikator pristupa poput privatni i u tu svrhu osigurajte metode dobivača / postavljača.

3. Sakrivanje metode

Sakrivanje metoda može se dogoditi u bilo kojoj hijerarhijskoj strukturi u javi. Kada podređena klasa definira statičku metodu s istim potpisom kao i statička metoda u roditeljskoj klasi, tada to podređena metoda skriva onaj u roditeljskom razredu. Da biste saznali više o statički Ključna riječ, ovo je dobro mjesto za početak.

Isto ponašanje koje uključuje metode instance naziva se prevladavanje metode. Da biste saznali više o načinu nadjačavanja plaćanja, naš vodič potražite ovdje.

Sada, pogledajmo ovaj praktični primjer:

javna klasa BaseMethodClass {javna statička void printMessage () {System.out.println ("osnovna statička metoda"); }}

BaseMethodClass ima jednu printMessage () statički metoda.

Dalje, kreirajmo podređenu klasu s istim potpisom kao u osnovnoj klasi:

javna klasa ChildMethodClass proširuje BaseMethodClass {javna statička void printMessage () {System.out.println ("dječja statička metoda"); }}

Evo kako to funkcionira:

ChildMethodClass.printMessage ();

Izlaz nakon poziva printMessage () metoda:

dječja statička metoda

The ChildMethodClass.printMessage () skriva metodu u BaseMethodClass.

3.1. Sakrivanje metode u odnosu na nadjačavanje

Skrivanje ne funkcionira kao nadjačavanje, jer statičke metode nisu polimorfne. Zamjena se događa samo s metodama instance. Podržava kasno vezanje, pa će se metoda koja se zove odrediti za vrijeme izvođenja.

S druge strane, skrivanje metoda djeluje sa statičkim. Stoga se određuje u vrijeme sastavljanja.

4. Zaključak

U ovom smo članku prešli na koncept skrivanja metoda i varijabli u Javi. Pokazali smo različite scenarije skrivanja i zasjenjivanja varijabli. Važan naglasak članka je i usporedba nadjačavanja i skrivanja metode.

Kao i obično, cjeloviti kôd dostupan je na GitHubu.