Statiska kapslade klasser - 1

"Så, ämne nummer två är statiska kapslade klasser. Kom ihåg att icke-statiska kapslade klasser kallas inre klasser .

"Låt oss linda våra huvuden kring vad ordet statisk betyder i samband med en kapslad klassdeklaration. Vad tycker du?"

"Om en variabel deklareras som statisk, finns det bara en kopia av variabeln. Så om en kapslad klass är statisk, betyder det då att du bara kan skapa ett objekt av den klassen?"

"Låt inte ordet statisk förvirra dig här. Det är sant att om en variabel deklareras som statisk, så finns det bara en kopia av variabeln. Men en statisk kapslad klass är mer som en statisk metod i detta avseende. ord statisk före klassdeklarationen indikerar att klassen inte lagrar referenser till objekt i dess yttre klass."

"Ah. Normala metoder lagrar implicit en objektreferens, men statiska metoder gör det inte. Det är samma sak med statiska klasser, har jag rätt, Ellie?"

"Absolut. Din snabba förståelse är lovvärd. Statiska kapslade klasser har inga dolda referenser till objekt i deras yttre klass."

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.
  }
 }
}

"Låt oss granska det här exemplet noggrant."

"Vilka variabler kan den statiska getAnimalCount-metoden komma åt?"

"Bara de statiska. För det är en statisk metod."

"Vilka variabler kan getMouseCount-metoden komma åt?"

"Både de statiska och icke-statiska. Den har en dold referens (detta) till ett Zoo-objekt."

"Det stämmer. Så, den statiska kapslade Mouse-klassen, som en statisk metod, kan komma åt Zoo-klassens statiska variabler, men den kan inte komma åt icke-statiska."

"Vi kan säkert skapa musobjekt, även om inte ett enda Zoo-objekt har skapats. Så här kan du göra det:"

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

"Mouse-klassen är faktiskt en mycket vanlig klass. Det faktum att den deklareras i Zoo-klassen ger den två speciella egenskaper."

1) När du skapar objekt av en kapslad klass (som klassen Mouse) utanför den yttre klassen, måste du också använda punktoperatorn för att ange namnet på den yttre klassen.

"Så här, till exempel: Zoo.Mouse."

2) Zoo.Mouse-klassen och dess objekt har tillgång till Zoo-klassens privata statiska variabler och metoder (eftersom Mouse-klassen också deklareras i Zoo-klassen).

"Det var allt för idag."

"Så bara ett extra namn och det är det?"

"Ja."

"Det är till och med lättare än det verkade först."