![Statiske nestede klasser - 1](https://cdn.codegym.cc/images/article/0d087a03-1a49-4f32-84f3-a732c26ebf2c/800.jpeg)
"Så, emne nummer to er statiske nestede klasser. Husk at ikke-statiske nestede klasser kalles indre klasser .
"La oss vikle hodet rundt hva ordet statisk betyr i sammenheng med en nestet klasseerklæring. Hva tror du?"
"Hvis en variabel er erklært som statisk, eksisterer bare én kopi av variabelen. Så hvis en nestet klasse er statisk, betyr det at du bare kan lage ett objekt av den klassen?"
"Ikke la ordet statisk forvirre deg her. Det er sant at hvis en variabel er erklært som statisk, så er det bare én kopi av variabelen. Men en statisk nestet klasse er mer som en statisk metode i denne forbindelse. ord statisk før klasseerklæringen indikerer at klassen ikke lagrer referanser til objekter i dens ytre klasse."
"Ah. Normale metoder lagrer implisitt en objektreferanse, men statiske metoder gjør det ikke. Det er det samme med statiske klasser, har jeg rett, Ellie?"
"Absolutt. Din raske forståelse er prisverdig. Statiske nestede klasser har ikke skjulte referanser til objekter av deres ytre 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.
}
}
}
"La oss gjennomgå dette eksemplet nøye."
"Hvilke variabler kan den statiske getAnimalCount-metoden få tilgang til?"
"Bare de statiske. Fordi det er en statisk metode."
"Hvilke variabler kan getMouseCount-metoden få tilgang til?"
"Både de statiske og ikke-statiske. Den har en skjult referanse (dette) til et Zoo-objekt."
"Det stemmer. Så den statiske nestede Mouse-klassen, som en statisk metode, kan få tilgang til Zoo-klassens statiske variabler, men den kan ikke få tilgang til ikke-statiske."
"Vi kan trygt lage museobjekter, selv om ikke et eneste Zoo-objekt er opprettet. Slik kan du gjøre det:"
class Home
{
public static void main(String[] args)
{
Zoo.Mouse mouse = new Zoo.Mouse();
}
}
"Mouse-klassen er faktisk en helt vanlig klasse. Det at den er deklarert i Zoo-klassen gir den to spesielle egenskaper."
1) Når du oppretter objekter av en nestet klasse (som Mouse-klassen) utenfor den ytre klassen, må du også bruke punktoperatoren for å angi navnet på den ytre klassen.
"Som dette, for eksempel: Zoo.Mouse."
2) Zoo.Mouse-klassen og dens objekter har tilgang til Zoo-klassens private statiske variabler og metoder (siden Mouse-klassen også er deklarert inne i Zoo-klassen).
"Det var det for i dag."
"Så bare et ekstra navn og det er det?"
"Ja."
"Det er enda enklere enn det så ut til å begynne med."