Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Beispielcodes interner Klassen der Java-Grundlagen

Detaillierte Erläuterung des Beispielcodes interner Klassen der Java-Grundlagen

黄舟
黄舟Original
2017-03-31 10:31:381240Durchsuche

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 auf eines der Organe, wie zum Beispiel das Herz: Es hat auch seine eigenen Attribute und Verhalten (Blut, Schlagen)

Natürlich kann es hier nicht einseitig angewendet werden Ein Attribut oder eine Methode stellt ein Herz dar, das eine Klasse erfordert

und das Herz befindet sich im menschlichen Körper, genau wie die innere Klasse im Äußeren

Beispiel 1: Das Basic Struktur 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();
    */
  }
}

Laufergebnis: 12

Aus dem obigen Beispiel ist nicht schwer zu erkennen, dass innere Klassen dem Guten tatsächlich ernsthaften Schaden zufügen Codestruktur, aber warum?

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

Genau wie das Herz direkt auf das Blut des Körpers zugreifen kann, 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 $ den in Out.In im obigen Programm darstellt.

Out.In in = new Out().new In() can Mit dieser Methode können zwei kleine Wissenspunkte beachtet werden:

1. Das Out am Anfang dient dazu, anzugeben, welche externe Klasse das interne Klassenobjekt sein muss Generiert befindet sich

2. Es muss ein Objekt der externen Klasse vorhanden sein, bevor es generiert werden kann. Das Objekt der inneren Klasse, da die Funktion der inneren Klasse darin besteht, auf die Mitgliedsvariablen in der äußeren Klasse zuzugreifen

Beispiel 2: Variablenzugriffsform in der inneren Klasse

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

Laufergebnisse:

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

Wie aus Instanz 1 hervorgeht, wird die innere Klasse in Abwesenheit von Mitgliedsvariablen und lokalen Variablen mit demselben Namen verwendet Greifen Sie direkt auf die Mitgliedsvariablen der äußeren Klasse zu, ohne den Attributnamen

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

und greifen auf Mitgliedsvariablen zu Der Zugriff auf Mitgliedsvariablen der äußeren Klasse erfordert die Verwendung von Out.this Attributname

Beispiel 3: StaticInnere 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();
  }
}

Laufendes Ergebnis: 12

Wie Sie sehen können, kann die innere Klasse nur auf die interne Klasse zugreifen, wenn Sie Static verwenden, um sie statisch zu machen Statische Mitgliedsvariablen der äußeren Klasse, die Einschränkungen unterliegen

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 durch den Klassennamen spielt es keine Rolle, ob ein externes Klassenobjekt 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 nur durch Methoden in der äußeren Klasse betrieben werden möchte, können Sie private verwenden, um die innere Klasse zu deklarieren

Im obigen Code müssen wir generieren Die In-Klasse im Out-Klassenobjekt wird bedient, und Out.In in = new Out().new In() kann nicht mehr zum Generieren eines Objekts der inneren Klasse verwendet werden

Mit anderen Worten, das Die innere Klasse kann zu diesem Zeitpunkt nur von der äußeren Klasse kontrolliert werden

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

Instanz 5: Methode innere 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);
  }
}

Laufende Ergebnisse:

3
12

Im obigen Code haben wir die innere Klasse verschoben zur Methode der äußeren Klasse und dann in der Methode der äußeren Klasse Generieren Sie dann ein inneres Klassenobjekt, um die Methode der inneren Klasse aufzurufen

Wenn wir hier Parameter an die Methode der äußeren Klasse übergeben müssen Dann müssen die Methodenparameter der äußeren Klasse mit final definiert werden

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

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes interner Klassen 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