Java interne Klasse
1. Was ist eine interne Kategorie?
Die Definition einer Klasse wird in einer anderen Klasse platziert, und diese Klasse wird als interne Klasse bezeichnet
2. Was sind die Eigenschaften interner Klassen?
1. Die innere Klasse ist immer noch eine unabhängige Klasse. Nach der Zusammenstellung wird die innere Klasse in eine unabhängige .CLASS -Datei zusammengestellt, aber sie geht den Klassennamen und den $ -Symbol der äußeren Klasse voraus.
2. Interne Klassen können nicht auf gewöhnliche Weise zugegriffen werden. Die innere Klasse ist Mitglied der äußeren Klasse, sodass die innere Klasse frei auf die Mitgliedsvariablen der äußeren Klasse zugreifen kann, unabhängig davon, ob privat oder nicht.
3. Wenn die interne Klasse als statisch deklariert wird, kann sie nicht auf die Mitgliedsvariablen der externen Klasse zugreifen. Zu diesem Zeitpunkt kann die interne Klasse nur auf die statischen Mitgliedsvariablen der externen Klasse zugreifen.
3. Was sind die internen Kategorien?
1. interne Klasse der Mitgliedsklasse
wie:
Paket com.test01; public class A {// Innere Klasse B erbt Testpojo und implementiert testInterface Schnittstellenklasse B erweitert testpojo implementiert testinterface {// Die eigene Methode von Innere Klasse B von öffentlicher void run () {System.out.println ("Ich renne!"); } // Schreiben Sie die Schnittstellenmethode public void testf () {System.out.println ("Implementieren Sie die Schnittstelle!"); }} // Rufen Sie die interne Klasse public void test () {b b = neu b () auf; B.Testf (); // Verwenden Sie die Umschreibe -Schnittstellenmethode b.run (); // rufen Sie Ihre eigene Methode an b.Testpojo (); // Aufrufmethode Erben der übergeordneten Klasse} // Hauptmethode public static void main (String [] args) {a a = new a (); A.Test (); }} // Definieren Sie eine Schnittstelle, die Methode ist testf () interface testInterface {public void testf ();} // Definieren Sie eine normale Klasse method testpojo () class testpojo {public void testpojo () {system.out.println ("i am a einfachen pojo class"); }} // implementieren, um die Methoden in der inneren Klasse textone {public static void main (String [] args) {ab B = new a (). New B (); // Das Aufrufen der inneren Klasse B in der Klasse A /** entspricht dem folgenden Code* a a = new a (); * Ab B = A.New B (); * */ b.Testf (); // Verwenden Sie die Umschreibe -Schnittstellenmethode b.run (); // Ihre eigene Methode aufrufen B.TestPojo (); // Aufrufen der Methode, die die übergeordnete Klasse}} erbt}}2. Interne Klasse Methode
Paket com.test01; public class pertest {public void test () {// eine Methodeklasse NE {// eine Methode für interne Klasse öffentliche void void fle () {// eine Methode für interne Klasse system.out.out.println definieren ("Ich fliege!"); }}; New Ne (). Fle (); // Die Methode der inneren Klasse} public static void main (String [] args) {new pertest (). Test (); //Prüfen}} HINWEIS: (1) Die interne Klasse der Methode kann nur innerhalb der Methode instanziiert werden, die die interne Klasse definiert und außerhalb dieser Methode nicht instanziiert werden kann.
(2) Das interne Klassenobjekt der Methode kann keine lokalen variablen der Methode nicht verwenden, in der sich die innere Klasse befindet.
Da sich die lokalen Variablen der Methode auf dem Stapel befinden, existieren sie nur während des Lebens der Methode. Wenn eine Methode endet, wird die Stapelstruktur gelöscht.
Lokale Variablen werden zu Geschichte. Nach Abschluss der Methode können die in der Methode erstellten inneren Klassenobjekte immer noch auf dem Haufen vorhanden!
Wenn beispielsweise ein Verweis darauf an einen anderen Code übergeben und in einer Mitgliedsvariablen gespeichert wird. Da lokale Variablen nicht garantiert sind, dass sie die gleiche lange Lebensdauer haben wie die der internen Klassenobjekte der Methode, können interne Klassenobjekte sie nicht verwenden. (Dieses Verständnis stammt von Baidu Encyclopedia)
3.. Anonyme interne Klasse
1) abstrakte anonyme interne Klassen
Paket com.anonymous; public class AbstractClass {public void test () {// Die Methode ist test testa a = new Testa () {// Die abstrakte Klasse @Override public void run () {// Abstract Class System.out.Out.println implementieren ("Ich verwende abstrakte anonyme innere Klasse"); }}; A.run (); // Die Methode der inneren Klasse} public static void main (String [] args) {new AbstractClass (). Test (); // Test}} // Definieren Sie eine abstrakte Klasse testa abstrakte Methode ist run () Abstract Class Testa {public abstract void run ();}2) Schnittstelle Anonyme interne Klasse
Paket com.anonymous; public class testanonymous {myInterface m = new myInterface () {// Implementieren Sie die Schnittstelle public void eat () {// Schreiben Sie die MyInterface -Schnittstellenmethode system.out.out.println neu ("Ich habe eine Mahlzeit!"); }}; public void ss () {// Methode SS M.EAT (); // die überschriebene Methode nennen} public static void main (String [] args) {new Testanonyme (). Ss (); // Test}} // eine Schnittstellenmethode als EatInterface MyInterface {public void eat ();} definieren;Hinweis: Anonyme innere Klassen können in Methoden oder in den Mitgliedern der Klasse definiert werden. Unabhängig davon, welche anonymen inneren Klassen sie sind, können sie nicht direkt von externen Klassen bezeichnet werden.
4. Welche Rolle spielt interne Kategorien?
Jede innere Klasse kann unabhängig von einer Implementierung (Schnittstelle) erben. Ob die periphere Klasse eine bestimmte Implementierung (Schnittstelle) vermittelt hat, hat keinen Einfluss auf die innere Klasse. Ohne die Fähigkeit interner Klassen, mehrere konkrete oder abstrakte Klassen zu erben, sind einige Design- und Programmierprobleme schwer zu lösen. Aus dieser Perspektive machen interne Klassen die Lösung mehrerer Vererbung vollständig.
Schnittstellen lösen einige Probleme, während interne Klassen "multiple Vererbung" effektiv implementieren.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!