inre klass i Java / hittills har vi känt att medlemmarna i klassen är variabler, metoder, konstruktörer och initialiseringsblock.
men det är också möjligt att ha en klass eller ett gränssnitt som medlem i en klass.
en klass som deklareras i en annan klass kallas kapslade klasser i java. Omfattningen av en kapslad klass är bunden av omfattningen av dess inneslutande klass (yttre klass).
således, om klass B definieras inuti klass A, Kan klass B inte existera oberoende utan klass A. här är klass A yttre eller inneslutande klass och klass B är kapslad klass.
en kapslad klass i java har tillgång till medlemmarna ( inklusive privata medlemmar) i sin omslutande klass. Men den inneslutande klassen har inte tillgång till medlemmarna i den kapslade klassen.
klassen som är medlem i en annan klass kan vara antingen statisk eller icke-statisk. Med andra ord finns det två typer av kapslade klasser i java: statisk och icke-statisk.
medlemsklassen som deklareras med en statisk modifierare kallas statisk kapslad klass i java.
medlemsklassen som är icke-statisk kallas inre klass eller icke-statisk kapslad klass. Det är den viktigaste typen av kapslad klass.
i denna handledning lär vi oss bara inre klass i Java. Senare kommer vi att diskutera statisk kapslad klass i ytterligare handledning.
inre klass i Java
en inre klass i java är en klass som deklareras inuti en annan klass utan statisk modifierare. Det är också allmänt känt som en icke-statisk kapslad klass i Java. Den kan komma åt alla medlemmar (variabler och metoder) i sin yttre klass.
en inre klass kan inte ha någon form av statiska medlemmar. Medlemmarna i java inner class kan vara:
- instansvariabler
- Instansmetoder
- konstruktörer
- Initialiseringsblock
- inre klass
Syntax för inre klass
access modifier class OuterClassName { . . . . . . . . . . access modifier class InnerClassName { // Members of the inner class. } // Other members of the outer class.}For example:public class Test { // Here, Test is an outer class. . . . . . . // Inner class public class A { // A is inner class as a member of its outer class. . . . . } }
klassen som håller den inre klassen kallas omslutande eller yttre klass. Den inneslutande klassen är en toppklass medan den inre klassen är medlem i ytterklassen.
förhållandet mellan yttre klass och inre klass representerar har-en relation. A har-ett förhållande etablerar förhållandet mellan två klasser. Det är också känt som komposition eller aggregering i Java.
när en inre klass är en inneslutande klass för en annan inre klass kallas den nestning av inre klasser. Det finns ingen gräns för häckningen av inre klasser.
i vilken version Inner class introducerades i Java?
Inner class introducerades i Java 1.1-versionen utan några ändringar i JVM som används för att hantera klassfilerna. Det är helt implementerat med hjälp av Java compiler.
Java-kompilatorn genererar en separat punktklassfil för varje inre klass som heter yttre$inre.klass och för en yttre klass som heter yttre.klass. Till exempel sammanställs en inre klass A i ett klasstest med namnet Test$A.class.
om något dot class-filnamn innehåller ” $ ” – symbolen i mitten, visar den en inner class-fil. Formatet för klassfilerna för inre klasser har samma som klassfiler för de yttre klasserna.
därför behandlar JVM klassfilerna för inre klasser och de yttre klasserna samma.
funktioner i inre klass
det finns flera viktiga funktioner i en inre klass som är följande:
1. En inre klass kan ha samma namn som den yttre klassen.
2. Omfattningen av den inre klassen begränsas av omfattningen av dess yttre klass.
3. Utan existerande ett yttre klassobjekt eller instans kommer det inte att finnas någon chans för ett befintligt inre klassobjekt.
4. En inre klass kan direkt komma åt alla variabler och metoder i den yttre klassen inklusive Privat.
5. Eftersom den inre klassen är en vanlig medlem i den yttre klassen precis som deklarerade variabler och metoder i klassen.
det är därför vi kan tillämpa alla java-åtkomstmodifierare som public, default, protected och private till inner class som liknar de andra medlemmarna i en klass. Men den yttre eller normala klassen kan inte vara privat eller skyddad.
6. Om variabelnamnet på den inre klassen är detsamma som variabelnamnet på den yttre klassen, kan vi komma åt den yttre klassvariabeln så här. OuterClassName.detta.Variabelnamn; här representerar detta nuvarande yttre klassobjekt.
7. Java inre klass är dold från en annan klass i sin inneslutande klass. Därför ger det en säkerhetsmekanism i applikationsprogrammet och minskar läsbarheten (förståelsen) av programmet.
8. Ett objekt av inre klass skapas ofta i sin yttre klass och kan inte skapas från andra klasser.
9. Både yttre klass och inre klassobjekt skapas i separata minnesplatser.
Syntax för att skapa objekt av inre klass i Java
en instans av en inre klass delar en relation med en instans av en yttre klass. Detta förhållande är sådant att vi inte kan skapa en instans av den inre klassen utan att ha en instans av den yttre klassen.
för att skapa ett objekt av inre klass måste du därför först skapa ett objekt av yttre klass för att binda till den inre klassen. Vi kan skapa flera objekt av en inre klass för samma instans av en yttre klass.
syntaxen för att skapa ett objekt för den inre klassen är som följer:
Syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();For example:// First create an object of Outer class Test. Test t = new Test();// Second create an object of inner class A. Test.A innerObj = t.new A();
Låt oss förstå hur en instans av en inre klass delar en relation med en instans av en yttre klass med realtidsexempel.
realtids exempel på inre klass
1. Antag att det finns ett universitet. Universitetet innehåller flera avdelningar som elektronik, datavetenskap, elektrisk, mekanisk, etc.
Antag att i morgon beslutade regeringen att stänga detta universitet på grund av dess olagliga verksamhet som händer på universitetet. Om universitetet är stängt stängs alla avdelningar på detta universitet automatiskt.
det är därför vi kan säga att avdelningar är knutna till sitt universitet. det vill säga deras funktioner är knutna till sitt universitet. Så utan ett befintligt universitetsobjekt finns det ingen chans för befintliga avdelningsobjekt.
eftersom institutionen alltid är en del av universitetsklassen. Därför måste vi förklara avdelningsklassen inom universitetsklassen.
class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}
således, utan en befintlig typ av objekt, om det inte finns någon chans att existera en annan typ av objekt, bör vi implementera inre klass.
2. Antag att det finns en bil. Inom en bil finns det flera viktiga enskilda komponenter som krävs. Den viktigaste delen av bilen är motorn.
motorn måste krävas för att göra en bil. Men utan ett befintligt bilobjekt finns det ingen chans att det finns ett motorobjekt.
eftersom en motor alltid är en viktig del av en bil. Därför måste klassmotorn deklareras inuti klassbilen.
class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}
ovanstående två realtidsexempel förklaras för att få de grundläggande ideerna om inre klass. Nu tar vi nästa exempel baserat på Java API.
3. Som vi vet att det i Java finns ett Kartkoncept i API för samlingar. En karta är inget annat än en grupp nyckelvärdespar. Varje nyckelvärdespar kallas en post. Nu utan ett befintligt kartobjekt, finns det någon chans för befintligt postobjekt?
svaret är nej eftersom det inte finns något objekt i en karta utan att det finns ett objekt i en karta. Därför definieras gränssnittsinmatning inuti kartgränssnittet.
Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }
nu skulle du ha förstått från ovanstående realtidsexempel att när ska använda en inre klass i Java-programmering.
användning av inre klass i Java
det finns följande viktiga användningar av inre klass i Java.
1. Den inre klassen är en värdefull funktion eftersom den tillåter oss att gruppera klasser och gränssnitt på ett ställe som logiskt hör ihop.
2. Det hjälper till att kontrollera synligheten hos den ena i den andra så att den kan vara mer läsbar och underhållbar.
3. Den bästa användningen av java inner class är när dess funktionalitet är knuten till dess yttre klass. Det vill säga, utan ett befintligt yttre klassobjekt finns det ingen chans för befintligt inre klassobjekt. Förstå realtidsexemplen.
4. . Java inner class är användbar för att ge säkerhet för den viktiga koden. Om vi till exempel förklarar inre klass som privat, är den inte tillgänglig för andra klasser. Detta innebär att ett objekt till inre klass inte kan skapas i några andra klasser.
Låt oss förstå det med hjälp av realtime exempel program.
Antag att vi skapar en klass BankAcct. För att få några bankkontouppgifter definierar vi instansvariabler ’balans’ och ’ränta’ av intresse i klassen.
calInterest () – metoden beräknar räntebeloppet och visar balansbeloppet. Titta på följande källkod.
class BankAcct { // Balance and Rate of interest. private double bal; private double rate; // Calculating interest and updated balance. void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance amount = " +bal); }}
eftersom du observerar att det inte finns någon säkerhet för den här koden på grund av att du inte använder några åtkomstmodifierare före BankAcct-klassen.
eftersom det är under standardåtkomstmodifierare kan alla programmerare enkelt skapa ett objekt i den här klassen och komma åt medlemmarna i klassen utanför andra klasser. Därför finns det ingen säkerhet för BankAcct-klassen.
till exempel kan alla programmerare skapa en annan klass. Han kommer att skapa en instans av BankAcct klass och kan ändra räntan så här:
class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }
således är calInterest () – metoden mycket känslig. Det måste skyddas från utomstående eftersom balansräkningarna kan uppdateras från utsidan av någon annan person. Endast auktoriserad person ska kunna uppdatera balansräkningarna.
för att ge säkerhet till calInterest () – metoden och räntesatsen, om vi lägger kod för calInterest () – metoden i en inre klass och gör den Privat, kan ingen komma åt dem från utanför klassen. Titta på koden.
class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}
nu är frågan hur man får tillgång till inre klass?
för att komma åt inner class skapar vi en kontakt () – metod inuti den yttre klassen. Inside contact () – metoden skapar vi ett objekt av inre klass och kan komma åt medlemmar av det.
en autentiseringsbankperson kan interagera med inner class genom att ringa kontakt () – metoden. När kontakt () – metoden kommer att ringas, kommer han att verifieras med lösenord och då kommer han att kunna använda den inre klassen och komma åt den.
således kan en inre klass tillhandahålla en säkerhetsmekanism för viktig kod i Java.
typer av inre klass i Java
baserat på deklaration och beteenden finns det i princip fyra typer av inre klasser i Java. De är som följer:
- Normal eller vanlig inre klass
- metod lokal inre klass
- anonym inre klass
- statisk kapslad inre klass
i denna handledning kommer vi att förstå var och en i korthet.
1. Normal eller vanlig inre klass: en klass skapad i en annan klass och utanför metoden utan statisk modifierare kallas vanlig eller normal inre klass.
2. Metod lokal inre klass: en klass som deklareras inom en metod för den yttre klassen kallas metod lokal inre klass.
3. Anonym inre klass: En klass som deklareras utan något namn alls kallas anonym inre klass.
4. Statisk kapslad inre klass: en klass som deklareras med statisk modifierare inom en klass kallas statisk kapslad inre klass. Det är också känt som en toppnivå kapslad klass. Den kan bara komma åt de statiska medlemmarna i den yttre klassen.
Obs: de vanliga, metodlokala och anonyma inre klasserna är icke-statiska kapslade klasser.
fördelar med Inner class
det finns i princip fem fördelar med inner class i java. De är följande:
1. Inre klass ger ett sätt att gruppera klasserna och gränssnitten på ett ställe som logiskt hör ihop.
2. Det kan direkt komma åt alla variabler och metoder i den yttre klassen inklusive Privat.
3. Det används för att utveckla mer läsbar och underhållbar kod.
4. Den behöver mindre kod för att skriva.
5. Det ökar inkapslingen.
skillnad mellan kapslad klass och inre klass i Java
kapslad klass är en klass som definieras i en annan klass. Det finns två typer av kapslad klass: statisk och icke-statisk. Icke-statisk kapslad klass är den inre klassen.
hoppas att denna handledning har täckt alla viktiga funktioner i inner class i java med realtidsexempelprogram. Jag hoppas att du har förstått den grundläggande tanken att använda inner class i Java.
Tack för att du läste!!!Nästa medlem i inner class i Java
Föregående Nästa ⇒