Statische verschachtelte Klassen – 1

„Thema Nummer zwei sind also statisch verschachtelte Klassen. Denken Sie daran, dass nicht statische verschachtelte Klassen als innere Klassen bezeichnet werden .

„Lassen Sie uns darüber nachdenken, was das Wort „statisch“ im Kontext einer verschachtelten Klassendeklaration bedeutet. Was denken Sie?“

„Wenn eine Variable als statisch deklariert ist, existiert nur eine Kopie der Variablen. Wenn also eine verschachtelte Klasse statisch ist, bedeutet das dann, dass Sie nur ein Objekt dieser Klasse erstellen können?“

„Lassen Sie sich hier nicht vom Wort „ statisch“ verwirren. Es stimmt, dass es nur eine Kopie der Variablen gibt, wenn eine Variable als statisch deklariert wird. Aber eine statisch verschachtelte Klasse ähnelt in dieser Hinsicht eher einer statischen Methode. Die Das Wort static vor der Klassendeklaration zeigt an, dass die Klasse keine Verweise auf Objekte ihrer äußeren Klasse speichert.“

„Ah. Normale Methoden speichern implizit eine Objektreferenz, statische Methoden jedoch nicht. Das Gleiche gilt für statische Klassen, habe ich recht, Ellie?“

„Absolut. Ihr schnelles Verständnis ist lobenswert. Statische verschachtelte Klassen haben keine versteckten Verweise auf Objekte ihrer äußeren Klasse.“

class Zoo
{
 private static int count = 7;
 private int mouseCount = 1;

 public static int getAnimalCount()
 {
  return count;
 }

 public int getMouseCount()
 {
  return mouseCount;
 }

 public static class Mouse
 {
  public Mouse()
  {
  }
   public int getTotalCount()
  {
   return count + mouseCount; // Compilation error.
  }
 }
}

„Sehen wir uns dieses Beispiel sorgfältig an.“

„Auf welche Variablen kann die statische getAnimalCount-Methode zugreifen?“

„Nur die statischen. Weil es eine statische Methode ist.“

„Auf welche Variablen kann die getMouseCount-Methode zugreifen?“

„Sowohl die statischen als auch die nicht statischen. Es hat einen versteckten Verweis (dies) auf ein Zoo-Objekt.“

„Das ist richtig. Die statisch verschachtelte Mouse-Klasse kann also wie eine statische Methode auf die statischen Variablen der Zoo-Klasse zugreifen, aber nicht auf nicht statische Variablen.“

„Wir können Mausobjekte sicher erstellen, auch wenn kein einziges Zoo-Objekt erstellt wurde. So können Sie das tun:“

class Home
{
 public static void main(String[] args)
 {
  Zoo.Mouse mouse = new Zoo.Mouse();
 }
}

„Die Mouse-Klasse ist eigentlich eine ganz gewöhnliche Klasse. Die Tatsache, dass sie innerhalb der Zoo-Klasse deklariert ist, verleiht ihr zwei besondere Eigenschaften.“

1) Wenn Sie Objekte einer verschachtelten Klasse (z. B. der Mausklasse) außerhalb der äußeren Klasse erstellen, müssen Sie auch den Punktoperator verwenden, um den Namen der äußeren Klasse anzugeben.

„So zum Beispiel: Zoo.Mouse.“

2) Die Zoo.Mouse-Klasse und ihre Objekte haben Zugriff auf die privaten statischen Variablen und Methoden der Zoo-Klasse (da die Mouse-Klasse auch innerhalb der Zoo-Klasse deklariert ist).

"Das war `s für heute."

„Also nur ein zusätzlicher Name und das wars?“

"Ja."

„Das ist noch einfacher, als es zunächst schien.“