Clase imbricate statice - 1

„Deci, subiectul numărul doi este clasele imbricate statice. Amintiți-vă că clasele imbricate non-statice sunt numite clase interioare .

„Hai să analizăm ce înseamnă cuvântul static în contextul unei declarații de clasă imbricată. Ce crezi?”

"Dacă o variabilă este declarată ca fiind statică, atunci există o singură copie a variabilei. Deci, dacă o clasă imbricată este statică, atunci înseamnă că puteți crea doar un obiect din acea clasă?"

„Nu lăsați cuvântul static să vă încurce aici. Este adevărat că dacă o variabilă este declarată ca fiind statică, atunci există o singură copie a variabilei. Dar o clasă imbricată statică este mai mult ca o metodă statică în acest sens. cuvântul static înainte de declarația clasei indică faptul că clasa nu stochează referințe la obiecte din clasa sa exterioară."

"Ah. Metodele normale stochează implicit o referință de obiect, dar metodele statice nu. Este la fel și cu clasele statice, am dreptate, Ellie?"

"Absolut. Înțelegerea ta rapidă este lăudabilă. Clasele imbricate statice nu au referințe ascunse la obiecte din clasa lor exterioară."

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

„Să revedem cu atenție acest exemplu”.

„Ce variabile poate accesa metoda statică getAnimalCount?”

"Numai cele statice. Pentru că este o metodă statică."

„Ce variabile poate accesa metoda getMouseCount?”

„Atât cele statice, cât și cele non-statice. Are o referință ascunsă (aceasta) la un obiect Zoo.”

"Așa este. Deci, clasa Mouse imbricată statică, ca o metodă statică, poate accesa variabilele statice ale clasei Zoo, dar nu le poate accesa pe cele nestatice."

„Putem crea în siguranță obiecte Mouse, chiar dacă nu a fost creat niciun obiect Zoo. Iată cum puteți face asta:”

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

"Clasa Mouse este de fapt o clasă foarte obișnuită. Faptul că este declarată în cadrul clasei Zoo îi conferă două caracteristici speciale."

1) Când creați obiecte dintr-o clasă imbricată (cum ar fi clasa Mouse) în afara clasei exterioare, trebuie să utilizați și operatorul punct pentru a specifica numele clasei exterioare.

„Așa, de exemplu: Zoo.Mouse”.

2) Clasa Zoo.Mouse și obiectele sale au acces la variabilele și metodele statice private ale clasei Zoo (deoarece clasa Mouse este de asemenea declarată în interiorul clasei Zoo).

— Asta e tot pentru azi.

— Deci, doar un nume suplimentar și gata?

"Da."

„Este chiar mai ușor decât părea la început”.