Classes imbriquées statiques - 1

"Ainsi, le sujet numéro deux concerne les classes imbriquées statiques. N'oubliez pas que les classes imbriquées non statiques sont appelées classes internes .

"Entendons-nous sur ce que signifie le mot statique dans le contexte d'une déclaration de classe imbriquée. Qu'en pensez-vous ?"

"Si une variable est déclarée statique, alors une seule copie de la variable existe. Donc, si une classe imbriquée est statique, cela signifie-t-il que vous ne pouvez créer qu'un seul objet de cette classe ?"

"Ne laissez pas le mot statique vous confondre ici. Il est vrai que si une variable est déclarée comme statique, alors il n'y a qu'une seule copie de la variable. Mais une classe imbriquée statique ressemble plus à une méthode statique à cet égard. le mot static avant la déclaration de classe indique que la classe ne stocke pas de références aux objets de sa classe externe."

"Ah. Les méthodes normales stockent implicitement une référence d'objet, mais pas les méthodes statiques. C'est la même chose avec les classes statiques, n'est-ce pas, Ellie ?"

"Absolument. Votre compréhension rapide est louable. Les classes imbriquées statiques n'ont pas de références cachées aux objets de leur classe externe."

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

"Revoyons attentivement cet exemple."

"A quelles variables la méthode statique getAnimalCount peut-elle accéder ?"

"Seulement les statiques. Parce que c'est une méthode statique."

"A quelles variables la méthode getMouseCount peut-elle accéder ?"

"Les statiques et les non statiques. Il a une référence cachée (ceci) à un objet Zoo."

"C'est vrai. Ainsi, la classe Mouse imbriquée statique, comme une méthode statique, peut accéder aux variables statiques de la classe Zoo, mais elle ne peut pas accéder aux variables non statiques."

"Nous pouvons créer des objets Souris en toute sécurité, même si aucun objet Zoo n'a été créé. Voici comment procéder :"

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

"La classe Mouse est en fait une classe très ordinaire. Le fait qu'elle soit déclarée à l'intérieur de la classe Zoo lui donne deux particularités."

1) Lors de la création d'objets d'une classe imbriquée (telle que la classe Mouse) en dehors de la classe externe, vous devez également utiliser l'opérateur point pour spécifier le nom de la classe externe.

"Comme ceci, par exemple : Zoo.Mouse."

2) La classe Zoo.Mouse et ses objets ont accès aux variables et méthodes statiques privées de la classe Zoo (puisque la classe Mouse est également déclarée à l'intérieur de la classe Zoo).

"C'est tout pour aujourd'hui."

"Alors juste un nom supplémentaire et c'est tout ?"

"Oui."

"C'est encore plus facile qu'il n'y paraissait au début."