Statiske indlejrede klasser - 1

"Så emne nummer to er statiske indlejrede klasser. Husk, at ikke-statiske indlejrede klasser kaldes indre klasser .

"Lad os vikle vores hoveder omkring, hvad ordet statisk betyder i sammenhæng med en indlejret klasseerklæring. Hvad synes du?"

"Hvis en variabel er erklæret som statisk, så eksisterer der kun én kopi af variablen. Så hvis en indlejret klasse er statisk, betyder det så, at du kun kan oprette ét objekt af den klasse?"

"Lad ikke ordet statisk forvirre dig her. Det er rigtigt, at hvis en variabel er erklæret som statisk, så er der kun én kopi af variablen. Men en statisk indlejret klasse er mere som en statisk metode i denne henseende. ord statisk før klasseerklæringen indikerer, at klassen ikke gemmer referencer til objekter i dens ydre klasse."

"Ah. Normale metoder gemmer implicit en objektreference, men statiske metoder gør det ikke. Det er det samme med statiske klasser, har jeg ret, Ellie?"

"Absolut. Din hurtige forståelse er prisværdig. Statiske indlejrede klasser har ikke skjulte referencer til objekter fra deres ydre 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.
  }
 }
}

"Lad os gennemgå dette eksempel omhyggeligt."

"Hvilke variabler kan den statiske getAnimalCount-metode få adgang til?"

"Kun de statiske. For det er en statisk metode."

"Hvilke variabler kan getMouseCount-metoden få adgang til?"

"Både de statiske og ikke-statiske. Den har en skjult reference (dette) til et Zoo-objekt."

"Det er rigtigt. Så den statiske indlejrede Mouse-klasse kan, ligesom en statisk metode, få adgang til Zoo-klassens statiske variabler, men den kan ikke få adgang til ikke-statiske."

"Vi kan trygt oprette museobjekter, selvom der ikke er oprettet et eneste Zoo-objekt. Sådan kan du gøre det:"

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

"Mouse-klassen er faktisk en ganske almindelig klasse. Det, at den er deklareret inde i Zoo-klassen, giver den to særlige kendetegn."

1) Når du opretter objekter af en indlejret klasse (såsom Mouse-klassen) uden for den ydre klasse, skal du også bruge prikoperatoren til at angive navnet på den ydre klasse.

"Som dette, for eksempel: Zoo.Mouse."

2) Zoo.Mouse-klassen og dens objekter har adgang til Zoo-klassens private statiske variabler og metoder (da Mouse-klassen også er erklæret inde i Zoo-klassen).

"Det var det for i dag."

"Så bare et ekstra navn og det er det?"

"Ja."

"Det er endnu nemmere, end det så ud til i første omgang."