Classi nidificate statiche - 1

"Quindi, l'argomento numero due sono le classi nidificate statiche. Ricorda che le classi nidificate non statiche sono chiamate classi interne .

"Facciamo chiarezza su cosa significhi la parola statico nel contesto di una dichiarazione di classe nidificata. Cosa ne pensi?"

"Se una variabile è dichiarata come statica, esiste solo una copia della variabile. Quindi, se una classe nidificata è statica, significa che puoi creare solo un oggetto di quella classe?"

"Non lasciare che la parola statico ti confonda qui. È vero che se una variabile è dichiarata come statica, allora c'è solo una copia della variabile. Ma una classe nidificata statica è più simile a un metodo statico a questo proposito. Il la parola static prima della dichiarazione di classe indica che la classe non memorizza i riferimenti agli oggetti della sua classe esterna."

"Ah. I metodi normali memorizzano implicitamente un riferimento a un oggetto, ma i metodi statici no. È lo stesso con le classi statiche, vero, Ellie?"

"Assolutamente. La tua rapida comprensione è encomiabile. Le classi nidificate statiche non hanno riferimenti nascosti agli oggetti della loro classe esterna."

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

"Esaminiamo attentamente questo esempio."

"A quali variabili può accedere il metodo statico getAnimalCount?"

"Solo quelli statici. Perché è un metodo statico."

"A quali variabili può accedere il metodo getMouseCount?"

"Sia quelli statici che quelli non statici. Ha un riferimento nascosto (questo) a un oggetto Zoo."

"Esatto. Quindi, la classe mouse nidificata statica, come un metodo statico, può accedere alle variabili statiche della classe Zoo, ma non può accedere a quelle non statiche."

"Possiamo creare in sicurezza oggetti Mouse, anche se non è stato creato un singolo oggetto Zoo. Ecco come puoi farlo:"

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

"La classe Mouse è in realtà una classe molto ordinaria. Il fatto che sia dichiarata all'interno della classe Zoo le conferisce due caratteristiche speciali."

1) Quando si creano oggetti di una classe nidificata (come la classe Mouse) al di fuori della classe esterna, è necessario utilizzare anche l'operatore punto per specificare il nome della classe esterna.

"Come questo, per esempio: Zoo.Mouse."

2) La classe Zoo.Mouse ei suoi oggetti hanno accesso alle variabili e ai metodi statici privati ​​della classe Zoo (poiché anche la classe Mouse è dichiarata all'interno della classe Zoo).

"Questo è tutto per oggi."

"Quindi solo un nome in più e basta?"

"SÌ."

"È ancora più facile di quanto sembrasse all'inizio."