Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung von Abschlüssen und Rückrufen zwischen inneren Java-Klassen

Detaillierte Erläuterung von Abschlüssen und Rückrufen zwischen inneren Java-Klassen

高洛峰
高洛峰Original
2017-01-24 11:55:131475Durchsuche

Vorwort

Ein Abschluss ist ein aufrufbares Objekt, das einige Informationen aus dem Bereich aufzeichnet, in dem es erstellt wurde. Anhand dieser Definition können wir erkennen, dass die innere Klasse ein objektorientierter Abschluss ist, da sie nicht nur Informationen über das äußere Klassenobjekt (den Bereich, in dem die innere Klasse erstellt wird) enthält, sondern auch automatisch einen Verweis auf diese äußere Klasse hat Objekt, innerhalb dieses Bereichs hat die innere Klasse das Recht, alle Mitglieder zu betreiben, einschließlich privater Mitglieder.

Eines der umstrittensten Probleme in Java ist die Überzeugung, dass Java eine Art zeigerähnlichen Mechanismus enthalten sollte, um Rückrufe zu ermöglichen. Durch Rückrufe kann ein Objekt Informationen enthalten, die es ihm ermöglichen, das ursprüngliche Objekt zu einem späteren Zeitpunkt aufzurufen. Wenn der Rückruf durch einen Zeiger implementiert wird, kann man nur hoffen, dass der Programmierer den Zeiger nicht missbraucht.

1. Innere Klasse des Mitglieds

Eine innere Klasse kann als Mitglied betrachtet werden. Eine innere Mitgliedsklasse kann bedingungslos auf alle Mitgliedseigenschaften und Mitgliedsmethoden der äußeren Klasse zugreifen.

class OutterClass {//外部类
 private int in = 0;
 static int inn=4;
 public OutterClass(int in) {
   this.in = in;
 }
 class InnerClass {   //内部类
   public void output() {
     System.out.println(in);
     System.out.println(inn);
   }
 }
}

Wenn eine innere Mitgliedsklasse eine Mitgliedsvariable oder -methode mit demselben Namen wie die äußere Klasse hat, wird standardmäßig auf das Mitglied der inneren Mitgliedsklasse zugegriffen. Wenn Sie auf ein Mitglied der externen Klasse mit demselben Namen zugreifen möchten, müssen Sie in der folgenden Form darauf zugreifen:

OutterClass(外部类).this.成员

Wenn eine externe Klasse auf eine interne Klasse zugreift, Sie müssen zunächst ein Objekt der internen Mitgliedsklasse erstellen und dann Access einen Verweis auf dieses Objekt übergeben.

class OutterClass {
 private int in = 0;
 static int inn=4;
 public OutterClass(int in) {
   InnerClass inner=new InnerClass();
   this.in=inner.innerNum;
 }
 class InnerClass {  //内部类
   public int innerNum=1;
   public void output() {
     System.out.println(in);
     System.out.println(inn);
     int a=OutterClass.this.inn;
   }
 }
}

Die innere Mitgliedsklasse existiert abhängig von der äußeren Klasse. Das heißt, wenn Sie ein Objekt der inneren Mitgliedsklasse erstellen möchten, ist dies die Voraussetzung ein Objekt der äußeren Klasse sein. Die allgemeine Methode zum Erstellen von inneren Klassenobjekten für Mitglieder ist wie folgt:

public class classa {
 public static void main(){
   OutterClass oc=new OutterClass(3);
   OutterClass.InnerClass in=oc.new InnerClass();
 }
}

2. Lokale innere Klasse

Eine lokale innere Klasse ist wie eine lokale Teil einer Methode. Genauso wie Variablen können sie keine öffentlichen, geschützten, privaten und statischen Modifikatoren haben.

class OutterClass {
 public OutterClass(int in) {
   class InnerClass {  //局部内部类
      int innerNum=1;
   }
 }
}

3. Verschachtelte innere Klassen

Verschachtelte innere Klassen sind als statische modifizierte innere Klassen. Eine als statisch deklarierte innere Klasse erfordert keine Verbindung zwischen dem inneren Klassenobjekt und dem äußeren Klassenobjekt, was bedeutet, dass wir direkt auf äußere.inner verweisen können, dh es besteht keine Notwendigkeit, eine äußere Klasse oder eine innere Klasse zu erstellen.

class OutterClass {
 public OutterClass(int in) {   
 }
 static class InnerClass {  //局部内部类
   int innerNum=1;
 }
}
public class classa {
 public static void main(){
   OutterClass.InnerClass in=new OutterClass.InnerClass();
 }
}

4. Anonyme innere Klassen

Anonyme innere Klassen verwenden wir am häufigsten, weil wir ihnen keinen Namen geben wollen , also gibt es Anonymous. Anonyme innere Klassen müssen im Voraus definiert werden.

btnSan.setOnClickListener(newOnClickListener() {
  @Override
  publicvoidonClick(View v) {
  }
});

5. Abschlüsse und Rückrufe

Ein Abschluss (Closure) ist ein Objekt, das aufgerufen werden kann. Es speichert das Objekt, das es erstellt hat. Informationen zum Umfang. JAVA unterstützt Abschlüsse nicht explizit, aber in JAVA können Abschlüsse über „Schnittstelle + interne Klasse“ implementiert werden.

Zum Beispiel: Ein Schnittstellenprogrammierer und ein Basisklassenschreiber haben beide die gleiche Methodenarbeit und den gleichen Methodennamen, aber ihre Bedeutung ist völlig unterschiedlich. In diesem Fall sind Abschlüsse erforderlich.

class Writer {//作家基类
 void work(){};
}
interface programmer{//程序员接口
 void work();
}

Der Abschlussimplementierungscode lautet wie folgt:

public class WriterProgrammer extends Writer {
 @Override
 public void work(){
   //写作
 }
 public void code(){
   //写代码
 }
 class ProgrammerInner implements programmer{
   @Override
   public void work(){
     code();
   }
 }
}

Eine innere Klasse, die den Programmierschnittstellenregeln folgt, ist in definiert die Unterklasse, und verwenden Sie dann die innere Klasse, um die work()-Methode des Programmierers zu implementieren, die Rückrufcode()-Methode und implementieren Sie direkt die work()-Methode des übergeordneten Klassenschreibers in der Unterklasse.

6. Die Rolle interner Klassen

Innere Klassen können gut versteckt werden.

Allgemeine nicht-innere Klassen dürfen keine privaten und geschützten Berechtigungen haben, interne Klassen können jedoch

Innere Klassen haben Zugriffsberechtigungen für alle Elemente der äußeren Klasse

Durch die Implementierung der Mehrfachvererbung

kann jedoch vermieden werden, dass die Schnittstelle geändert und zwei Methoden mit demselben Namen in derselben Klasse aufgerufen werden.

7. Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle beim Erlernen oder Verwenden von Java hilfreich ist. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen zu kommunizieren.

Ausführlichere Erläuterungen zu Schließungen und Rückrufen zwischen Java-internen Klassen finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn