Statische geneste klassen - 1

"Dus onderwerp nummer twee is statische geneste klassen. Onthoud dat niet-statische geneste klassen innerlijke klassen worden genoemd .

"Laten we eens kijken wat het woord statisch betekent in de context van een geneste klassendeclaratie. Wat denk je ervan?"

"Als een variabele als statisch wordt gedeclareerd, bestaat er maar één kopie van de variabele. Dus als een geneste klasse statisch is, betekent dat dan dat je maar één object van die klasse kunt maken?"

"Laat het woord statisch je hier niet verwarren. Het is waar dat als een variabele als statisch wordt gedeclareerd, er slechts één kopie van de variabele is. Maar een statische geneste klasse lijkt in dit opzicht meer op een statische methode. De woord static voor de klassedeclaratie geeft aan dat de klasse geen verwijzingen naar objecten van zijn buitenste klasse opslaat."

"Ah. Normale methoden slaan impliciet een objectreferentie op, maar statische methoden niet. Hetzelfde geldt voor statische klassen, heb ik gelijk, Ellie?"

"Absoluut. Uw snelle begrip is lovenswaardig. Statische geneste klassen hebben geen verborgen verwijzingen naar objecten van hun buitenste 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.
  }
 }
}

"Laten we dit voorbeeld eens goed bekijken."

"Tot welke variabelen kan de statische getAnimalCount-methode toegang krijgen?"

'Alleen de statische. Omdat het een statische methode is.'

"Tot welke variabelen heeft de methode getMouseCount toegang?"

"Zowel de statische als de niet-statische. Het heeft een verborgen verwijzing (dit) naar een Zoo-object."

"Dat klopt. Dus de statische geneste Mouse-klasse heeft, net als een statische methode, toegang tot de statische variabelen van de Zoo-klasse, maar heeft geen toegang tot niet-statische variabelen."

"We kunnen veilig Mouse-objecten maken, zelfs als er geen enkel Zoo-object is gemaakt. Zo kun je dat doen:"

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

"De Mouse-klasse is eigenlijk een heel gewone klasse. Het feit dat deze wordt gedeclareerd in de Zoo-klasse geeft hem twee speciale kenmerken."

1) Wanneer u objecten maakt van een geneste klasse (zoals de klasse Mouse) buiten de buitenste klasse, moet u ook de puntoperator gebruiken om de naam van de buitenste klasse op te geven.

"Zoals dit bijvoorbeeld: Zoo.Mouse."

2) De klasse Zoo.Mouse en zijn objecten hebben toegang tot de privé statische variabelen en methoden van de klasse Zoo (aangezien de klasse Mouse ook binnen de klasse Zoo wordt gedeclareerd).

"Dat is het voor vandaag."

"Dus gewoon een extra naam en dat is alles?"

"Ja."

"Dat is nog makkelijker dan het in eerste instantie leek."