I programmeringsspråk for Java, når en klasse erdefinert i en annen klasse, kalles en slik klasse en nestet klasse eller indre klasse. Nested-klasser er en unik funksjon i Java som er inkludert siden jdk1.1. Husk alltid at denne hekkefunksjonaliteten er et forhold mellom klasser, ikke mellom Java-objekter. Tidligere har vi snakket om hvordan man instanserer forekomstvariabel i Java, og nå skal vi se på hvordan vi kan innstille en indre klasse i Java.
Slik Instantiate en indre klasse - Nested Class i Java
- Typer av nestede klasser
- Ikke statisk
- statisk
- Få tilgang til modifikatorer for nestede eller indre klasser
- Funksjoner av Nested Class
- Fordeler
- Eksempelkode, forklaring av kode og utgang
Typer av nestede klasser i Java
Ikke-statisk nestet klasse
Ikke-statiske nestede klasser kalles indre klasser. Den har tilgang til alle de vedlagte klassens forekomstdata, inkludert private felt og metoder.
syntax
[modifiers] class OuterClassName { code... [modifiers] class InnerClassName { code.... } }
Opprettelse
<OuterClassName> outerObj = new <OuterClassName>(arguments); <OuterClassName>.<InnerClassName> innerObj = outerObj.new <InnerClassName> (arguments);
Egenskaper
- Den ytre klassen (klassen som inneholder den indre klassen) kan gi øyeblikkelig så mange antall objekter innen klasse som den måtte ønske, inne i koden.
- Hvis den indre klassen er offentlig og den inneholdende klassen også, så kan kode i en annen ubeslektet klasse også skape et eksempel på den indre klassen.
- Ingen indre klasseobjekter blir automatisk innstanset med et ytre klasseobjekt.
- Den indre klassekoden har fri tilgang til alleelementer i det ytre klasseobjektet som inneholder det, med navn (uansett hva tilgangsnivået til elementene er), hvis den indre klassen har en variabel med samme navn, kan den ytre klassens variabel få tilgang slik:
<OuterClassName> .Dette. <Variabel> - Den ytre klassen kan til og med kalle den indre metodens private metoder.
- Det indre klasseobjektet må være assosiert med en forekomst av den ytre klassen.
Statisk nestet klasse
Hekkede klasser som er erklært statiske kalles bare statiske nestede klasser. En statisk klasse har ingen tilgang til instansspesifikke data.
syntax
<access-specifier> class OuterClassName { public static class <StaticInnerClassName> { code. . . } code . . . }
Opprettelse
<OuterClassName>.<InnerClassName> innerObj = new <OuterClassName>.<InnerClassName>(arguments);
Egenskaper
- For statisk indre klasse, så kan den statiske indre klassen bli instantivert uten en ytre klasseinstans.
- Statiske medlemmer av den ytre klassen er synlige for den statiske indre klassen, uansett hva deres tilgangsnivå er.
- Ikke-statiske medlemmer av den ytre klassen er ikke tilgjengelige, fordi det ikke er noen forekomst av den ytre klassen.
- En indre klasse kan ikke ha statiske medlemmer med mindre den indre klassen i seg selv er markert som statisk.
- Noen ganger blir ikke statiske nestede klasser referert til som indre klasse i det hele tatt, siden de ikke krever ytre klasses instans.
- En statisk indre klasse er akkurat som enhver annen indre klasse, men den har ikke referansen til dens ytre klasseobjekt som genererte den.
Få tilgang til modifikatorer for nestede eller indre klasser
- offentlig
- beskyttet
- privat
- misligholde
Funksjoner av Nested Class
Et objekt av en indre klasse har en implisittreferanse til det ytre klasseobjektet som instantiserte det. Gjennom denne pekeren får den tilgang til enhver variabel av det ytre objektet. Bare statiske indre klasser har ikke denne pekeren, men får tilgang til alle statiske medlemmer bare ved å bruke det ytre klassens navn. Den er faktisk usynlig når vi skriver koden, men kompilatoren tar seg av den. Indre klasser er faktisk et fenomen av kompilatoren og ikke JVM. Denne funksjonen gjør Java-klasser rikere og mer nyttige.
Fordeler med nestet klasse
- Det er en måte å logisk gruppere klasser på som bare brukes ett sted.
- Det øker innkapslingen.
- Heklede klasser kan føre til mer lesbar og vedlikeholdbar kode.
- Logisk gruppering av klasser - Hvis en klasse ernyttig for bare en annen klasse, så er det logisk å legge den inn i den klassen og holde de to sammen. Hekker som "hjelpeklasser" gjør pakken mer strømlinjeformet.
- Økt innkapsling - Vurder to øverste nivåklasser, A og B, der B trenger tilgang til medlemmer av A som ellers ville bli erklært private. Ved å skjule klasse B i klasse A, kan medlemmene fra A være private, men B kan få tilgang til dem. B kan også være skjult for omverdenen.
Program 1
/* within the scope of outer class */ class Outer{ int var1 = 2; int var2 = 3; /* Inner Class */ class Inner{ void add(){ System.out.println("Addition is:"+(var1+var2)); } } void show(){ Inner in = new Inner(); in.add(); } } class NestedClassDemo{ public static void main(String args[]){ Outer out = new Outer(); out.show(); } }
Utgang 1
Program 2
/* Outside the scope of outer class */ class Outer{ int var1 = 2; int var2 = 3; /* Inner Class */ class Inner{ void add(){ System.out.println("Addition is:"+(var1+var2)); } } } class NestedClassDemo1{ public static void main(String args[]){ Outer.Inner in = new Outer().new Inner(); in.add(); } }
Utgang 2
Forklaring av kode og output
I det første programmet har vi oppstartet den nestede klassen indre i en metode som er erklært innenfor ytre klasse, d.v.s.
innenfor rammen av ytre klasse. Vi vil spesiallisere indre klasser innenfor rammen av den ytre klassen. Den indre klassen er privat ettersom vi vet at private medlemmer ikke vil være tilgjengelige utenfor rammen for den klassen som inneholder private medlemmer.
I det andre programmet har vi oppstartet den nestede klassen indre utenfor rammen for ytre klasse. Syntaks ser ut til å være vanskelig, men det er ikke sånn. Det er for enkelt:
Vi vil dele denne uttalelsen i to:
Outer out = new Outer(); Outer.Inner in = out.new Inner();
Først må vi lage et objekt for det ytreklasse. Så vil vi lage et objekt for den indre klassen som indre klasse er medlem av ytre klasse, så vi må gjenkjenne den indre klassen unikt, kan gjøres med Ytre. Indre så må vi lage objektet som er gjort av en ny operatør etterfulgt av konstruktøren av den aktuelle klassen. Det samme gjøres her.
Blits på
Etter å ha satt sammen den nestede klassen, vil to .klasse-filer bli generert med Outer.class og Outer $ Inner.class (her er klasse Inner innenfor klasse Ytre).
Sjekk ut mer nyttige opplæringsprogrammer og definitive retningslinjer for Java-programmering.
kommentarer