Inner Class in Java / Use, Types, voorbeeld

Inner Class in Java | tot nu toe hebben we geweten dat de leden van de class variabelen, methoden, constructors en initializer blokken zijn.

maar het is ook mogelijk om een klasse of een interface als lid van een klasse.

een klasse die binnen een andere klasse is gedeclareerd, staat bekend als geneste klassen in java. Het bereik van een geneste klasse is gebonden door het bereik van de omsluitende klasse (buitenste klasse).

als klasse B binnen Klasse A is gedefinieerd, dan kan klasse B niet onafhankelijk bestaan zonder klasse A. Hier is Klasse A buiten – of omsluitingsklasse en is klasse B geneste klasse.

een geneste klasse in java heeft toegang tot de leden (inclusief privéleden) van de bijbehorende klasse. Maar de ingesloten klasse heeft geen toegang tot de leden van de geneste klasse.

de klasse die deel uitmaakt van een andere klasse kan statisch of niet-statisch zijn. Met andere woorden, er zijn twee soorten geneste klassen in java: static en non-static.

de member class die gedeclareerd wordt met een statische modifier staat bekend als static geneste class in java.

de lidklasse die niet-statisch is, staat bekend als inner class of niet-statisch geneste class. Het is het belangrijkste type geneste klasse.

in deze tutorial zullen we alleen innerlijke klasse in Java leren. Later zullen we statische geneste klasse bespreken in de verdere tutorial.
Inner class in Java met realtime voorbeeld

Inner class in Java

een inner class in java is een klasse die binnen in een andere klasse wordt gedeclareerd zonder statische modifier. Het is ook algemeen bekend als een niet-statische geneste klasse in Java. Het heeft toegang tot alle leden (variabelen en methoden) van zijn buitenste klasse.

een binnenklasse kan geen enkele vorm van statische leden hebben. De leden van de java inner class kunnen zijn:

  1. Instance variabelen
  2. Instance methods
  3. Constructors
  4. Initializer block
  5. Binnenklasse

syntaxis van Binnenklasse

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. . . . . } }

de klasse die de binnenklasse bevat, wordt “enclosing” of “outer class” genoemd. De omsluitende klasse is een topklasse, terwijl de binnenklasse lid is van de buitenklasse.

de relatie tussen buitenklasse en binnenklasse vertegenwoordigt heeft-een relatie. A heeft-een relatie legt de relatie tussen twee klassen vast. Het is ook bekend als compositie of aggregatie in Java.

wanneer een binnenklasse een omsluitende klasse is voor een andere binnenklasse, wordt het nesten van binnenklassen genoemd. Er is geen limiet aan het nestelen van innerlijke klassen.

In welke versie Inner class werd geïntroduceerd in Java?

Inner class werd geïntroduceerd in de Java 1.1 versie zonder enige veranderingen in de JVM gebruikt om de class bestanden te verwerken. Het is volledig geïmplementeerd met behulp van Java compiler.

Java compiler genereert een apart dot class bestand voor elke binnenklasse genaamd Outer$Inner.klasse en voor een buitenste klasse genaamd Outer.klasse. Bijvoorbeeld, een innerlijke klasse A wordt gecompileerd in een klasse Test genaamd Test$A.class.

als een dot class bestandsnaam “$” symbool in het midden bevat, toont het een binnenste class bestand. Het formaat van de class bestanden voor innerlijke klassen heeft hetzelfde als class bestanden voor de buitenste klassen.

daarom behandelt JVM de class-bestanden voor binnenklassen en de buitenklassen hetzelfde.

kenmerken van Binnenklasse

er zijn verschillende belangrijke kenmerken van een binnenklasse die als volgt is:

1. Een binnenklasse kan dezelfde naam hebben als de buitenklasse.

2. Het bereik van de binnenklasse wordt begrensd door het bereik van de buitenklasse.

3. Zonder het bestaan van een buitenklasse object of instantie, zal er geen kans zijn op een bestaand binnenklasse object.

4. Een binnenklasse heeft direct toegang tot alle variabelen en methoden van de buitenklasse, inclusief privé.

5. Aangezien de binnenklasse een regelmatig lid is van de buitenklasse, net als de aangegeven variabelen en methoden in de klasse.

daarom kunnen we alle Java access modifiers zoals public, default, protected en private toepassen op een innerlijke klasse die vergelijkbaar is met de andere leden van een klasse. Maar de uiterlijke of normale klasse kan niet privé of beschermd zijn.

6. Als de variabelnaam van de binnenklasse hetzelfde is als de variabelnaam van de buitenklasse, kunnen we de Outer class variabele op deze manier benaderen. Buitenklasse naam.deze.Variablenaam; hier representeert dit het huidige object van de buitenklasse.

7. Java inner class is verborgen voor een andere klasse in zijn omsluitende klasse. Daarom biedt het een veiligheidsmechanisme in het toepassingsprogramma en vermindert de leesbaarheid (begrip) van het programma.

8. Een object van de innerlijke klasse wordt vaak gemaakt in zijn buitenste klasse en kan niet worden gemaakt uit andere klassen.

9. Zowel buitenklasse als binnenklasse objecten worden gemaakt in aparte geheugenlocaties.

syntaxis om een object van een Binnenklasse in Java aan te maken

een instantie van een binnenklasse deelt een relatie met een instantie van een buitenklasse. Deze relatie is zodanig dat we geen instantie van de innerlijke klasse kunnen creëren zonder een instantie van de uiterlijke klasse te hebben.

om een object van binnenklasse te maken, moet u eerst een object van buitenklasse maken om aan de binnenklasse te binden. We kunnen meerdere objecten van een binnenklasse maken voor dezelfde instantie van een buitenklasse.

de syntaxis voor het maken van een object voor de binnenklasse is als volgt:

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();

laten we begrijpen hoe een instantie van een innerlijke klasse een relatie deelt met een instantie van een buitenste klasse met realtime voorbeelden.

realtime voorbeeld van Binnenklasse

1. Stel dat er een universiteit is. Universiteit bevat verschillende afdelingen zoals elektronica, informatica, elektrische, mechanische, enz.Ga ervan uit dat de regering morgen heeft besloten deze universiteit te sluiten vanwege haar illegale activiteiten op de universiteit. Als de universiteit wordt gesloten, worden alle afdelingen van deze universiteit automatisch gesloten.

daarom kunnen we zeggen dat afdelingen gebonden zijn aan de universiteit. dat wil zeggen dat de functionaliteiten zijn verbonden met de universiteit. Zonder een bestaand universiteitsobject is er dus geen kans op bestaande departementsobjecten.

omdat de afdeling altijd deel uitmaakt van de universitaire klasse. Daarom moeten we de afdeling klasse binnen de universiteit klasse verklaren.

class University { // University is outer class. . . . . . . . class Department { // Department is inner class. . . . . . . . . }}

dus, zonder een bestaand type object, als er geen kans is op een ander type object, moeten we inner class implementeren.

2. Stel dat er een auto is. Binnen een auto zijn er verschillende belangrijke individuele componenten die nodig zijn. Het belangrijkste onderdeel van de auto is de motor.

de motor moet nodig zijn om een auto te maken. Maar zonder een bestaand autoobject is er ook geen kans op een motorobject.

omdat een motor altijd een belangrijk onderdeel van een auto is. Daarom moet de klasse motor worden aangegeven in de klasse auto.

class Car { . . . . . . . . . class Engine { . . . . . . . . . . }}

de bovenstaande twee realtime voorbeelden worden uitgelegd om de basisideeën van innerlijke klasse te krijgen. Nu nemen we het volgende voorbeeld op basis van Java API.

3. Zoals we weten is er in Java Een Kaartconcept in de collections API. Een kaart is niets anders dan een groep sleutelwaardeparen. Elke sleutel-waarde paren wordt één item genoemd. Is er zonder een bestaand kaartobject een kans op een bestaand itemobject?

het antwoord is nee omdat zonder een object van een kaart, het item object ook niet kan bestaan. Dat is de reden waarom interface ingang is gedefinieerd in de kaart-interface.

Interface Map { // Map is an outer interface. . . . . . . . . . Interface Entry { // Entry is an inner interface. . . . . . . . . . . } }

nu zou je uit het bovenstaande real-time voorbeeld begrepen hebben dat wanneer een innerlijke klasse moet gebruiken in Java programmeren.

gebruik van Binnenklasse in Java

er zijn de volgende belangrijke toepassingen van binnenklasse in Java.

1. De innerlijke klasse is een waardevolle eigenschap omdat het ons in staat stelt om klassen en interfaces te groeperen op één plaats die logischerwijs bij elkaar hoort.

2. Het helpt om de zichtbaarheid van de ene binnen de andere te controleren, zodat het beter leesbaar en onderhoudbaar kan zijn.

3. Het beste gebruik van java inner class is wanneer de functionaliteit is gekoppeld aan de buitenste klasse. Dat wil zeggen, zonder een bestaand buitenklassobject is er geen kans op een bestaand binnenklassobject. Begrijp de real-time voorbeelden.

4. . Java inner class is handig om de beveiliging van de belangrijke code te bieden. Als we bijvoorbeeld inner class als privé verklaren, is het niet beschikbaar voor andere klassen. Dit betekent dat een object naar innerlijke klasse niet kan worden gemaakt in andere klassen.

laten we het begrijpen met behulp van realtime voorbeeld programma.

ga ervan uit dat we een class BankAcct aanmaken. Om een aantal bankgegevens te krijgen, definiëren we instance variabelen ‘saldo’ en ‘rente’ in de klasse.

calinterest () methode berekent het rentebedrag en geeft het saldo weer. Kijk naar de volgende broncode.

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); }}

omdat u merkt dat er geen beveiliging is voor deze code omdat er geen toegangsveranderaars gebruikt zijn voor de klasse BankAcct.

omdat het onder de standaard access modifiers staat, kan elke programmeur eenvoudig een object van deze klasse aanmaken en de leden van de klasse benaderen van buiten andere klassen. Daarom is er geen zekerheid voor BankAcct class.

bijvoorbeeld, elke programmeur kan een andere klasse aanmaken. Hij zal een instantie van BankAcct class creëren en kan de rente op deze manier wijzigen:

class Myclass { public static void main(String args ){ BankAcct ba = new BankAcct(); ba.calInterest(11.5); } }

dus, calInterest () methode is zeer gevoelig. Het moet worden beschermd tegen buitenstaanders, omdat de balans rekeningen kunnen worden bijgewerkt van buitenaf door een andere persoon. Alleen geautoriseerde personen moeten in staat zijn om de saldorekeningen bij te werken.

om zekerheid te bieden aan calInterest () methode en rentepercentage, als we code van calInterest() methode binnen een innerlijke klasse plaatsen en het privé maken, kan niemand ze van buiten de klasse benaderen. Kijk naar de code.

class BankAcct { . . . . . . . . private class Interest { private double rate; void calInterest() { double interest = bal * rate/100; bal += interest; System.out.println("Balance = " +bal); } }}

nu is de vraag hoe toegang te krijgen tot inner class?

om toegang te krijgen tot inner class, zullen we een contact() methode maken binnen de outer class. Inside contact () methode, zullen we een object van innerlijke klasse te creëren en kunnen toegang leden van het.

een persoon van een authenticatiebank kan interageren met de inner class door de methode contact() te bellen. Wanneer contact() methode zal worden aangeroepen, zal hij worden geverifieerd met een wachtwoord en dan zal hij in staat zijn om de innerlijke klasse te gebruiken en toegang te krijgen.

Zo kan een binnenklasse een veiligheidsmechanisme bieden voor belangrijke code in Java.

typen Binnenklassen in Java

op basis van declaratie en gedrag zijn er in principe vier typen binnenklassen in Java. Zij zijn als volgt::

  • normale of normale Binnenklasse
  • methode lokale Binnenklasse
  • anonieme Binnenklasse
  • statische geneste Binnenklasse

in deze handleiding zullen we elk in het kort begrijpen.

1. Normale of normale innerlijke klasse: Een klasse die binnen een andere klasse en buiten de methode zonder statische modifier is gemaakt, wordt normale of normale innerlijke klasse genoemd.

2. Methode lokale binnenklasse: een klasse die binnen een methode van de buitenklasse wordt verklaard heet methode lokale binnenklasse.

3. Anoniem inner class: Een klasse die wordt verklaard zonder enige naam wordt genoemd anonieme innerlijke klasse.

4. Statische geneste binnenklasse: een klasse die is gedeclareerd met statische modifier binnen een klasse heet statische geneste binnenklasse. Het is ook bekend als een top-level geneste klasse. Het heeft alleen toegang tot de statische leden van de buitenste klasse.

opmerking: de reguliere, method-local en anonieme binnenklassen zijn niet-statische geneste klassen.

voordelen van Binnenklasse

er zijn in principe vijf voordelen van binnenklasse in java. Zij zijn als volgt:

1. Inner class biedt een manier om de klassen en interfaces te groeperen op één plaats die logisch bij elkaar hoort.
2. Het kan direct toegang krijgen tot alle variabelen en methoden van de buitenste klasse, inclusief privé.
3. Het wordt gebruikt om meer leesbare en onderhoudbare code te ontwikkelen.
4. Het heeft minder code nodig om te schrijven.
5. Het verhoogt de inkapseling.

verschil tussen geneste klasse en Binnenklasse in Java

geneste klasse is een klasse die binnen een andere klasse is gedefinieerd. Er zijn twee soorten geneste klasse: statisch en niet-statisch. Niet-statische geneste klasse is de innerlijke klasse.

hoop dat deze tutorial alle belangrijke functies van inner class in java heeft behandeld met realtime voorbeeldprogramma ‘ s. Ik hoop dat je het basisidee van het gebruik van innerlijke klasse in Java hebt begrepen.
Bedankt voor het lezen!!!Volgende ⇒ member inner class in Java

Vorige Volgende ⇒

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.