Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der internen Klasseninstanzen der Java-Grundlagen

Detaillierte Erläuterung der internen Klasseninstanzen der Java-Grundlagen

Y2J
Y2JOriginal
2017-04-27 09:30:421300Durchsuche

In diesem Artikel werden hauptsächlich detaillierte Erklärungen und Beispiele für grundlegende interne Java-Klassen vorgestellt. Freunde, die sie benötigen, können sich auf

Detaillierte Erklärungen und Beispiele für interne Java-Basisklassen beziehen

Innere Klassen sind nicht leicht zu verstehen, aber um es ganz klar auszudrücken: Eine Klasse enthält tatsächlich eine andere Klasse

So wie eine Person aus Gehirn, Gliedmaßen, Organen und anderen Körperteilen besteht, sind interne Klassen recht Eines der Organe, wie zum Beispiel das Herz: Es hat auch seine eigenen Attribute und Verhaltensweisen (Blut, Schlagen)

Natürlich kann ein Herz hier nicht einseitig durch Attribute oder Methoden dargestellt werden, sondern es ist eine Klasse erforderlich

Und das Herz ist im menschlichen Körper, genau wie die innere Klasse im Außen

Beispiel 1: Die Grundstruktur der inneren Klasse

//外部类
class Out {
  private int age = 12;  
  //内部类
  class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
    //或者采用下种方式访问
    /*
    Out out = new Out();
    Out.In in = out.new In();
    in.print();
    */
  }
}

Laufergebnisse: 12

Aus dem obigen Beispiel ist nicht schwer zu erkennen, dass interne Klassen einer guten Codestruktur tatsächlich ernsthaft schaden, aber warum interne Klassen verwenden?

Da die innere Klasse die Mitgliedsvariablen der äußeren Klasse (einschließlich private) frei verwenden kann, ohne Objekte der äußeren Klasse zu generieren, ist dies der einzige Vorteil der inneren Klasse

Genau wie die Das Herz kann direkt auf das Blut des Körpers zugreifen, anstatt Blut über einen Arzt abzunehmen

Nachdem das Programm kompiliert wurde, werden zwei .class-Dateien generiert, nämlich Out.class und Out$In.class

wobei $ Out im obigen Programm darstellt. Das eine in .In.

Out.In in = new Out().new In() kann zum Generieren von Objekten innerer Klassen verwendet werden kleine Wissenspunkte, auf die bei dieser Methode geachtet werden muss

1. Das Out am Anfang soll angeben, für welche externe Klasse das interne Klassenobjekt generiert werden muss

2. Es muss ein Objekt der externen Klasse sein, bevor das Objekt der internen Klasse generiert werden kann, da die Funktion der internen Klasse darin besteht, auf Mitgliedsvariablen in externen Klassen zuzugreifen

Beispiel 2: Variablenzugriffsform in interner Klassen

class Out {
  private int age = 12;
   
  class In {
    private int age = 13;
    public void print() {
      int age = 14;
      System.out.println("局部变量:" + age);
      System.out.println("内部类变量:" + this.age);
      System.out.println("外部类变量:" + Out.this.age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
  }
}

Laufende Ergebnisse:

Lokale Variablen: 14
Innere Klassenvariablen: 13
Externe Klassenvariablen: 12

Aus Beispiel 1 geht hervor, dass die innere Klasse direkt auf die Mitgliedsvariablen der äußeren Klasse zugreift, ohne das Out.this-Attribut anzugeben, wenn die innere Klasse keine Mitgliedsvariablen und lokalen Variablen mit demselben Namen hat name

Andernfalls überschreiben die lokalen Variablen in der inneren Klasse die Mitgliedsvariablen der äußeren Klasse

und greifen auf die internen Mitgliedsvariablen der Klasse selbst zu Um auf die Mitgliedsvariablen der externen Klasse zuzugreifen, müssen Sie Out.this verwenden. Attributname

Beispiel 3: Statische innere Klasse

class Out {
  private static int age = 12;
   
  static class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out.In();
    in.print();
  }
}

Ausführungsergebnisse: 12

Wie Sie sehen können, kann die innere Klasse nur auf die statischen Mitgliedsvariablen der äußeren Klasse zugreifen, wenn Sie statisch verwenden, um das Innere statisch zu machen, was Einschränkungen unterliegt

Zweitens kann Out.In als Ganzes betrachtet werden, da die innere Klasse statisch ist, und das Objekt der inneren Klasse kann direkt neu sein (Zugriff auf statisch über den Klassennamen, es spielt keine Rolle, ob das Objekt der äußeren Klasse generiert wird oder nicht)

Beispiel 4: Private innere Klasse

class Out {
  private int age = 12;
   
  private class In {
    public void print() {
      System.out.println(age);
    }
  }
  public void outPrint() {
    new In().print();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    //此方法无效
    /*
    Out.In in = new Out().new In();
    in.print();
    */
    Out out = new Out();
    out.outPrint();
  }
}

Laufendes Ergebnis: 12

Wenn eine innere Klasse möchte nur in eine äußere Klasse eingebunden werden Methodenoperation, dann können Sie private verwenden, um die innere Klasse zu deklarieren

Im obigen Code müssen wir für den Betrieb ein Objekt der In-Klasse in der Out-Klasse generieren, und Wir können Out.In in = new Out() nicht mehr verwenden. new In() generiert ein Objekt der inneren Klasse

Mit anderen Worten, die innere Klasse kann zu diesem Zeitpunkt nur von der äußeren Klasse gesteuert werden

Mein Herz kann beispielsweise nur von meinem Körper gesteuert werden, andere Menschen können nicht direkt darauf zugreifen

Beispiel 5: Methode der inneren Klasse

class Out {
  private int age = 12;
 
  public void Print(final int x) {
    class In {
      public void inPrint() {
        System.out.println(x);
        System.out.println(age);
      }
    }
    new In().inPrint();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out out = new Out();
    out.Print(3);
  }
}

Laufendes Ergebnis:

3
12

Im obigen Code haben wir die innere Klasse in die Methode der äußeren Klasse verschoben und dann eine innere Klasse generiert Klassenobjekt in der Methode der äußeren Klasse, um die Methode der inneren Klasse aufzurufen

Wenn wir zu diesem Zeitpunkt Parameter an die Methode der externen Klasse übergeben müssen, müssen die Methodenparameter der externen Klasse mithilfe von definiert werden final

Final hat hier keine besondere Bedeutung, es ist nur eine Ausdrucksform.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der internen Klasseninstanzen der Java-Grundlagen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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