Variabel og metode gemmer sig i Java

1. Introduktion

I denne vejledning vi vil lære om variabel og metode gemmer sig på Java-sproget.

Først forstår vi konceptet og formålet med hvert af disse scenarier. Derefter dykker vi ned i brugssagerne og undersøger forskellige eksempler.

2. Variabel skjulning

Variabel skjulning sker, når vi erklærer en ejendom i et lokalt omfang, der har samme navn som det, vi allerede har i det ydre omfang.

Inden vi springer til eksemplerne, lad os kort opsummere de mulige variable rækkevidde i Java. Vi kan definere dem med følgende kategorier:

  • lokale variabler - deklareret i et stykke kode, såsom metoder, konstruktører, i enhver kodeblok med krøllede seler
  • instansvariabler - defineret inde i en klasse og hører til objektets forekomst
  • klasse eller statisk variabler - erklæres i klassen med statisk nøgleord. De har et klasseniveau.

Lad os nu beskrive skjulet med eksempler for hver individuelle kategori af variabler.

2.1. Kraften i det lokale

Lad os se på SkjulVariabel klasse:

public class HideVariable {private String message = "dette er instansvariabel"; HideVariable () {String message = "constructor local variable"; System.out.println (besked); } public void printLocalVariable () {String message = "method local variable"; System.out.println (besked); } public void printInstanceVariable () {String message = "metode lokal variabel"; System.out.println (denne besked); }}

Her har vi besked variabel erklæret 4 forskellige steder. De lokale variabler, der er erklæret inde i konstruktøren, og de to metoder skygger forekomstvariablen.

Lad os teste initialiseringen af ​​et objekt og kalde metoderne:

HideVariable variabel = ny HideVariable (); variable.printLocalVariable (); variable.printInstanceVariable ();

Output af koden ovenfor er:

konstruktør lokal variabel metode lokal variabel dette er instansvariabel

Her henter de første 2 opkald de lokale variabler.

For at få adgang til forekomstvariablen fra det lokale omfang kan vi bruge det her nøgleord som det vises i printInstanceVariable () metode.

2.2. Skjul og hierarkiet

På samme måde skjuler barnets variabel, når både barnet og forældreklasserne har en variabel med samme navn, den fra forældren.

Lad os antage, at vi har forældreklassen:

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

Derefter definerer vi en barneklasse:

offentlig klasse ChildVariable udvider ParentVariable {String instanceVariable = "underordnet variabel"; public void printInstanceVariable () {System.out.println (instanceVariable); }}

Lad os initialisere to forekomster for at teste det. En med forældreklasse og en anden med barnet, og derefter påberåbe sig printInstanceVariable () metoder på hver af dem:

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

Outputtet viser egenskaben, der gemmer sig:

forældervariabel underordnet variabel

I de fleste tilfælde bør vi undgå at oprette variabler med samme navn både i overordnede og underordnede klasser. I stedet skal vi bruge en korrekt adgangsmodifikator som privat og give getter / setter-metoder til dette formål.

3. Metode skjul

Metode skjul kan forekomme i enhver hierarkistruktur i java. Når en underordnet klasse definerer en statisk metode med den samme signatur som en statisk metode i forældreklassen, så er barnets metode skjuler den i forældreklassen. For at lære mere om statisk nøgleord, denne opskrivning er et godt sted at starte.

Den samme adfærd, der involverer instansmetoderne, kaldes metodeoverstyring. For at lære mere om metode tilsidesættelse af kassen vores guide her.

Lad os nu se på dette praktiske eksempel:

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

BaseMethodClass har en enkelt printMessage () statisk metode.

Lad os derefter oprette en underordnet klasse med den samme signatur som i basisklassen:

offentlig klasse ChildMethodClass udvider BaseMethodClass {public static void printMessage () {System.out.println ("statisk metode til underordnet barn"); }}

Sådan fungerer det:

ChildMethodClass.printMessage ();

Outputtet efter opkald til printMessage () metode:

barnets statiske metode

Det ChildMethodClass.printMessage () skjuler metoden i BaseMethodClass.

3.1. Metode skjuler vs tilsidesættelse

Skjul fungerer ikke som tilsidesættelse, fordi statiske metoder ikke er polymorfe. Tilsidesættelse sker kun med instansmetoder. Det understøtter sen binding, så hvilken metode der kaldes bestemmes ved kørselstid.

På den anden side fungerer metoden gemmer sig med statiske. Derfor bestemmes det ved kompileringstidspunktet.

4. Konklusion

I denne artikel gik vi over begrebet metode og variabel skjulning i Java. Vi viste forskellige scenarier for variabel skjulning og skygge. Det vigtige højdepunkt i artiklen sammenligner også metoden, der tilsidesætter og skjuler.

Som sædvanlig er den komplette kode tilgængelig på GitHub.