Variabel og metode skjuling i Java

1. Introduksjon

I denne veiledningen, vi skal lære om variabel og metode skjuling på Java-språket.

Først vil vi forstå konseptet og formålet med hvert av disse scenariene. Etter det vil vi dykke ned i brukssakene og undersøke forskjellige eksempler.

2. Variabel skjuling

Variabel skjuling skjer når vi erklærer en eiendom i et lokalt omfang som har samme navn som det vi allerede har i det ytre omfanget.

Før vi hopper til eksemplene, la oss kort oppsummere mulige variabelt omfang i Java. Vi kan definere dem med følgende kategorier:

  • lokale variabler - deklarert i et stykke kode, for eksempel metoder, konstruktører, i en hvilken som helst kodeblokk med krøllete bukseseler
  • forekomstvariabler - definert inne i en klasse og tilhører forekomsten av objektet
  • klasse eller statisk variabler - blir deklarert i klassen med statisk nøkkelord. De har klassenivå.

La oss nå beskrive skjulingen med eksempler for hver enkelt kategori av variabler.

2.1. Kraften til det lokale

La oss ta en titt på HideVariable klasse:

public class HideVariable {private String message = "this is instance variable"; HideVariable () {String message = "constructor local variable"; System.out.println (melding); } public void printLocalVariable () {String message = "method local variable"; System.out.println (melding); } public void printInstanceVariable () {String message = "method local variable"; System.out.println (denne meldingen); }}

Her har vi beskjed variabel erklært på 4 forskjellige steder. De lokale variablene som er erklært inne i konstruktøren, og de to metodene skygger forekomstervariabelen.

La oss teste initialiseringen av et objekt og kalle metodene:

HideVariable variable = new HideVariable (); variable.printLocalVariable (); variable.printInstanceVariable ();

Utgangen av koden ovenfor er:

konstruktør lokal variabel metode lokal variabel dette er forekomstvariabel

Her henter de to første samtalene de lokale variablene.

For å få tilgang til forekomstvariabelen fra det lokale omfanget, kan vi bruke dette nøkkelord som det er vist i printInstanceVariable () metode.

2.2. Skjul og hierarkiet

På samme måte, når både barnet og foreldreklassene har en variabel med samme navn, skjuler barnets variabel den fra foreldrene.

La oss anta at vi har foreldreklassen:

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

Etter det definerer vi en barneklasse:

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

La oss initialisere to forekomster for å teste det. En med foreldreklasse og en annen med barnet, og påkaller deretter printInstanceVariable () metoder på hver av dem:

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

Utgangen viser eiendommen som skjuler seg:

foreldrevariabel barnevariabel

I de fleste tilfeller bør vi unngå å lage variabler med samme navn både i foreldre- og barneklasser. I stedet bør vi bruke en skikkelig tilgangsmodifikator som privat og gi getter / setter-metoder for det formålet.

3. Metode gjemmer seg

Metode skjuling kan skje i hvilken som helst hierarkistruktur i java. Når en barneklasse definerer en statisk metode med samme signatur som en statisk metode i foreldreklassen, så er barnets metode gjemmer seg den i foreldreklassen. For å lære mer om statisk nøkkelord, denne oppskriften er et godt sted å starte.

Den samme oppførselen som involverer forekomstmetodene kalles metodeoverstyring. For å lære mer om metodeoverstyring, sjekk guiden vår her.

La oss nå se på dette praktiske eksemplet:

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

BaseMethodClass har en singel printMessage () statisk metode.

Deretter la oss lage en barneklasse med samme signatur som i basisklassen:

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

Slik fungerer det:

ChildMethodClass.printMessage ();

Utgangen etter å ha ringt printMessage () metode:

barn statisk metode

De ChildMethodClass.printMessage () skjuler metoden i BaseMethodClass.

3.1. Metode Skjul vs Overstyring

Skjuling fungerer ikke som å overstyre, fordi statiske metoder ikke er polymorfe. Overstyring skjer bare med forekomstmetoder. Den støtter sen binding, så hvilken metode som skal kalles bestemmes ved kjøretid.

På den annen side fungerer metode skjuler seg med statiske. Derfor er det bestemt på kompileringstidspunktet.

4. Konklusjon

I denne artikkelen gikk vi over begrepet metode og variabel skjuling i Java. Vi viste forskjellige scenarier med variabelt skjul og skyggelegging. Det viktige høydepunktet i artikkelen er å sammenligne metoden som overstyrer og gjemmer seg.

Som vanlig er den komplette koden tilgjengelig på GitHub.


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