Innere Klasse in Java / Verwendung, Typen, Beispiel

Innere Klasse in Java / Bisher wussten wir, dass die Mitglieder der Klasse Variablen, Methoden, Konstruktoren und Initialisierungsblöcke sind.

Es ist aber auch möglich, eine Klasse oder ein Interface als Mitglied einer Klasse zu haben.

Eine in einer anderen Klasse deklarierte Klasse wird in Java als verschachtelte Klassen bezeichnet. Der Gültigkeitsbereich einer verschachtelten Klasse ist an den Gültigkeitsbereich ihrer umschließenden Klasse (äußere Klasse) gebunden.

Wenn also Klasse B innerhalb von Klasse A definiert ist, kann Klasse B nicht unabhängig ohne Klasse A existieren.

Eine verschachtelte Klasse in Java hat Zugriff auf die Member (einschließlich privater Member) ihrer umschließenden Klasse. Die umschließende Klasse hat jedoch keinen Zugriff auf die Mitglieder der verschachtelten Klasse.

Die Klasse, die Mitglied einer anderen Klasse ist, kann entweder statisch oder nicht statisch sein. Mit anderen Worten, es gibt zwei Arten von verschachtelten Klassen in Java: statisch und nicht statisch.

Die Member-Klasse, die mit einem statischen Modifikator deklariert wird, wird in Java als statische verschachtelte Klasse bezeichnet.

Die Elementklasse, die nicht statisch ist, wird als innere Klasse oder nicht statische verschachtelte Klasse bezeichnet. Es ist der wichtigste Typ verschachtelter Klassen.

In diesem Tutorial lernen wir nur die innere Klasse in Java. Später werden wir die statische verschachtelte Klasse im weiteren Tutorial diskutieren.
Innere Klasse in Java mit Echtzeitbeispiel

Innere Klasse in Java

Eine innere Klasse in Java ist eine Klasse, die innerhalb einer anderen Klasse ohne statischen Modifikator deklariert wird. Es wird auch allgemein als nicht statische verschachtelte Klasse in Java bezeichnet. Es kann auf alle Member (Variablen und Methoden) seiner äußeren Klasse zugreifen.

Eine innere Klasse kann keine statischen Elemente haben. Die Mitglieder der inneren Java-Klasse können sein:

  1. Instanzvariablen
  2. Instanzmethoden
  3. Konstruktoren
  4. Initialisierungsblock
  5. Innere Klasse

Syntax der inneren Klasse

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

Die Klasse, die die innere Klasse enthält, wird umschließende oder äußere Klasse genannt. Die umschließende Klasse ist eine Klasse der obersten Ebene, während die innere Klasse Mitglied der äußeren Klasse ist.

Die Beziehung zwischen äußerer Klasse und innerer Klasse stellt eine Has-A-Beziehung dar. Eine Has-A-Beziehung stellt die Beziehung zwischen zwei Klassen her. Es wird auch als Zusammensetzung oder Aggregation in Java bekannt.

Wenn eine innere Klasse eine einschließende Klasse für eine andere innere Klasse ist, wird dies als Verschachtelung innerer Klassen bezeichnet. Es gibt keine Begrenzung für die Verschachtelung innerer Klassen.

In welcher Version wurde die innere Klasse in Java eingeführt?

Die innere Klasse wurde in der Java 1.1-Version ohne Änderungen in der JVM eingeführt, die zum Verarbeiten der Klassendateien verwendet wurde. Es ist vollständig mit Hilfe von Java-Compiler implementiert.

Der Java-Compiler generiert für jede innere Klasse eine separate Dot-Klassendatei mit dem Namen Outer$Inner .klasse und für eine äußere Klasse namens Outer .Klasse. Beispielsweise wird eine innere Klasse A zu einer Klasse Test mit dem Namen Test $ kompiliertA.class.

Wenn ein Punktklassendateiname das Symbol „$“ in der Mitte enthält, wird eine innere Klassendatei angezeigt. Das Format der Klassendateien für innere Klassen entspricht den Klassendateien für die äußeren Klassen.

Daher behandelt JVM die Klassendateien für innere Klassen und die äußeren Klassen gleich.

Merkmale der inneren Klasse

Es gibt mehrere wichtige Merkmale einer inneren Klasse, die wie folgt lautet:

1. Eine innere Klasse kann denselben Namen wie die äußere Klasse haben.

2. Der Umfang der inneren Klasse wird durch den Umfang ihrer äußeren Klasse begrenzt.

3. Ohne ein äußeres Klassenobjekt oder eine Instanz zu existieren, gibt es keine Chance auf ein vorhandenes inneres Klassenobjekt.

4. Eine innere Klasse kann direkt auf alle Variablen und Methoden der äußeren Klasse zugreifen, einschließlich private .

5. Da die innere Klasse ein reguläres Mitglied der äußeren Klasse ist, genau wie deklarierte Variablen und Methoden in der Klasse.

Deshalb können wir alle Java-Zugriffsmodifikatoren wie public , default , protected und private auf die innere Klasse anwenden, ähnlich wie die anderen Mitglieder einer Klasse. Die äußere oder normale Klasse kann jedoch nicht privat oder geschützt sein.

6. Wenn der Variablenname der inneren Klasse mit dem Variablennamen der äußeren Klasse übereinstimmt, können wir so auf die äußere Klassenvariable zugreifen. OuterClassName.dieser.variableName; Hier repräsentiert dies das aktuelle äußere Klassenobjekt.

7. Die innere Klasse von Java ist vor einer anderen Klasse in ihrer umschließenden Klasse verborgen. Daher bietet es einen Sicherheitsmechanismus im Anwendungsprogramm und verringert die Lesbarkeit (Verständnis) des Programms.

8. Ein Objekt der inneren Klasse wird oft in seiner äußeren Klasse erstellt und kann nicht aus anderen Klassen erstellt werden.

9. Sowohl äußere als auch innere Klassenobjekte werden an separaten Speicherorten erstellt.

Syntax zum Erstellen eines Objekts der inneren Klasse in Java

Eine Instanz einer inneren Klasse teilt eine Beziehung mit einer Instanz einer äußeren Klasse. Diese Beziehung ist so, dass wir keine Instanz der inneren Klasse erstellen können, ohne eine Instanz der äußeren Klasse zu haben.

Um ein Objekt der inneren Klasse zu erstellen, müssen Sie daher zuerst ein Objekt der äußeren Klasse erstellen, um es an die innere Klasse zu binden. Wir können mehrere Objekte einer inneren Klasse für dieselbe Instanz einer äußeren Klasse erstellen.

Die Syntax zum Erstellen eines Objekts für die innere Klasse lautet wie folgt:

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

Lassen Sie uns anhand von Echtzeitbeispielen verstehen, wie eine Instanz einer inneren Klasse eine Beziehung zu einer Instanz einer äußeren Klasse teilt.

Echtzeitbeispiel der inneren Klasse

1. Angenommen, es gibt eine Universität. Universität enthält mehrere Abteilungen wie Elektronik, Informatik, Elektrotechnik, Mechanik, etc.

Angenommen, morgen hat die Regierung beschlossen, diese Universität aufgrund ihrer illegalen Aktivitäten an der Universität zu schließen. Wenn die Universität geschlossen ist, werden alle Abteilungen dieser Universität automatisch geschlossen.

Deshalb können wir sagen, dass Abteilungen an seine Universität gebunden sind. d.h. ihre Funktionalitäten sind mit ihrer Universität verbunden. Ohne ein vorhandenes Universitätsobjekt besteht also keine Chance auf vorhandene Abteilungsobjekte.

Da die Abteilung immer ein Teil der Universitätsklasse ist. Daher müssen wir die Abteilungsklasse innerhalb der Universitätsklasse deklarieren.

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

Wenn also ohne einen vorhandenen Objekttyp keine Chance besteht, einen anderen Objekttyp zu existieren, sollten wir die innere Klasse implementieren.

2. Angenommen, es gibt ein Auto. Innerhalb eines Autos gibt es mehrere wichtige Einzelkomponenten, die benötigt werden. Die wichtigste Komponente des Autos ist der Motor.

Der Motor muss benötigt werden, um ein Auto herzustellen. Aber ohne ein vorhandenes Autoobjekt gibt es auch keine Chance, ein Motorobjekt zu existieren.

Da ein Motor immer ein wichtiger Teil eines Autos ist. Daher muss die Klasse engine innerhalb der Klasse car deklariert werden.

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

Die beiden obigen Echtzeitbeispiele werden erläutert, um die grundlegenden Ideen der inneren Klasse zu erhalten. Jetzt nehmen wir das nächste Beispiel basierend auf Java API.

3. Wie wir wissen, gibt es in Java ein Kartenkonzept in der Collections-API. Eine Map ist nichts anderes als eine Gruppe von Schlüssel-Wert-Paaren. Jedes Schlüssel-Wert-Paar wird als ein Eintrag bezeichnet. Gibt es jetzt ohne ein vorhandenes Kartenobjekt eine Chance auf ein vorhandenes Eintragsobjekt?

Die Antwort lautet nein, da ohne ein Objekt einer Karte das Eintragsobjekt nicht existieren kann. Aus diesem Grund wird der Schnittstelleneintrag innerhalb der Kartenschnittstelle definiert.

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

Nun hätten Sie aus dem obigen Echtzeitbeispiel verstanden, dass Sie eine innere Klasse in der Java-Programmierung verwenden sollten.

Verwendung der inneren Klasse in Java

Es gibt die folgenden wichtigen Verwendungen der inneren Klasse in Java.

1. Die innere Klasse ist eine wertvolle Funktion, da sie es uns ermöglicht, Klassen und Schnittstellen an einem Ort zu gruppieren, der logisch zusammengehört.

2. Es hilft, die Sichtbarkeit von einem innerhalb des anderen zu steuern, so dass es besser lesbar und wartbar sein kann.

3. Die beste Verwendung von Java Inner class ist, wenn seine Funktionalität an seine äußere Klasse gebunden ist. Das heißt, ohne ein vorhandenes äußeres Klassenobjekt gibt es keine Chance auf ein vorhandenes inneres Klassenobjekt. Verstehen Sie die Echtzeit-Beispiele.

4. . Java innere Klasse ist nützlich, um die Sicherheit für den wichtigen Code bereitzustellen. Wenn wir beispielsweise die innere Klasse als privat deklarieren, steht sie anderen Klassen nicht zur Verfügung. Dies bedeutet, dass ein Objekt der inneren Klasse nicht in anderen Klassen erstellt werden kann.

Lassen Sie es uns mit Hilfe eines Echtzeit-Beispielprogramms verstehen.

Angenommen, wir erstellen eine Klasse BankAcct. Um einige Bankkontodaten zu erhalten, definieren wir Instanzvariablen ‚balance‘ und ‚rate‘ von Interesse in der Klasse.

Die Methode calInterest() berechnet den Zinsbetrag und zeigt den Saldobetrag an. Schauen Sie sich den folgenden Quellcode an.

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

Wie Sie feststellen, gibt es keine Sicherheit für diesen Code, da vor der BankAcct-Klasse keine Zugriffsmodifikatoren verwendet werden.

Da es sich um standardmäßige Zugriffsmodifikatoren handelt, kann jeder Programmierer problemlos ein Objekt dieser Klasse erstellen und von außerhalb anderer Klassen auf die Mitglieder der Klasse zugreifen. Daher gibt es keine Sicherheit für die BankAcct-Klasse.

Zum Beispiel kann jeder Programmierer eine andere Klasse erstellen. Er erstellt eine Instanz der BankAcct-Klasse und kann den Zinssatz wie folgt ändern:

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

Daher ist die calInterest () -Methode sehr empfindlich. Es muss vor Außenstehenden geschützt werden, da die Kontostände von außen von jeder anderen Person aktualisiert werden können. Nur autorisierte Person sollte in der Lage sein, die Balance-Konten zu aktualisieren.

Um die Sicherheit der calInterest() -Methode und des Zinssatzes zu gewährleisten, kann niemand von außerhalb der Klasse darauf zugreifen, wenn wir den Code der calInterest() -Methode in eine innere Klasse einfügen und sie privat machen. Schau dir den Code an.

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

Nun ist die Frage, wie man auf die innere Klasse zugreift?

Um auf die innere Klasse zuzugreifen, erstellen wir eine contact() -Methode innerhalb der äußeren Klasse. Innerhalb der contact() -Methode erstellen wir ein Objekt der inneren Klasse und können darauf zugreifen Mitglieder davon.

Eine Authentifizierungsbankperson kann mit der inneren Klasse interagieren, indem sie die contact() -Methode aufruft. Wenn die contact() -Methode aufgerufen wird, wird er mit einem Passwort verifiziert und kann dann die innere Klasse verwenden und darauf zugreifen.

Somit kann eine innere Klasse einen Sicherheitsmechanismus für wichtigen Code in Java bereitstellen.

Arten innerer Klassen in Java

Basierend auf Deklaration und Verhalten gibt es in Java grundsätzlich vier Arten innerer Klassen. Sie sind wie folgt:

  • Normale oder reguläre innere Klasse
  • Methode Lokale innere Klasse
  • Anonyme innere Klasse
  • Statische verschachtelte innere Klasse

In diesem Tutorial werden wir jede in Kürze verstehen.

1. Normale oder reguläre innere Klasse: Eine Klasse, die innerhalb einer anderen Klasse und außerhalb der Methode ohne statischen Modifikator erstellt wurde, wird als reguläre oder normale innere Klasse bezeichnet.

2. Methode lokale innere Klasse: Eine Klasse, die innerhalb einer Methode der äußeren Klasse deklariert wird, wird als Methode lokale innere Klasse bezeichnet.

3. Anonyme innere Klasse: Eine Klasse, die überhaupt keinen Namen hat, wird als anonyme innere Klasse bezeichnet.

4. Statische verschachtelte innere Klasse: Eine Klasse, die mit static modifier innerhalb einer Klasse deklariert wird, wird als statische verschachtelte innere Klasse bezeichnet. Es wird auch als verschachtelte Klasse der obersten Ebene bezeichnet. Es kann nur auf die statischen Mitglieder der äußeren Klasse zugreifen.

Hinweis: Die regulären, methodenlokalen und anonymen inneren Klassen sind nicht statische verschachtelte Klassen.

Vorteile der inneren Klasse

Es gibt grundsätzlich fünf Vorteile der inneren Klasse in Java. Sie sind wie folgt:

1. Inner class bietet eine Möglichkeit, die Klassen und Schnittstellen an einem Ort zu gruppieren, der logisch zusammengehört.
2. Es kann direkt auf alle Variablen und Methoden der äußeren Klasse einschließlich private zugreifen.
3. Es wird verwendet, um besser lesbaren und wartbaren Code zu entwickeln.
4. Es braucht weniger Code zu schreiben.
5. Es erhöht die Verkapselung.

Unterschied zwischen verschachtelter Klasse und innerer Klasse in Java

Verschachtelte Klasse ist eine Klasse, die in einer anderen Klasse definiert ist. Es gibt zwei Arten von verschachtelten Klassen: statisch und nicht statisch. Nicht statische verschachtelte Klasse ist die innere Klasse.

Ich hoffe, dass dieses Tutorial alle wichtigen Funktionen der inneren Klasse in Java mit Echtzeit-Beispielprogrammen behandelt hat. Ich hoffe, dass Sie die Grundidee der Verwendung der inneren Klasse in Java verstanden haben.
Danke fürs Lesen!!!Weiter ⇒ Member innere Klasse in Java

⇐ Zurück Weiter ⇒

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.