Mga static na nested na klase - 1

"Kaya, ang pangalawang paksa ay ang mga static na nested na klase. Tandaan na ang mga non-static na nested na klase ay tinatawag na mga panloob na klase .

"Ipalibot natin ang ating mga ulo sa kung ano ang ibig sabihin ng salitang static sa konteksto ng isang nested class declaration. Ano sa palagay mo?"

"Kung ang isang variable ay idineklara bilang static, isang kopya lang ng variable ang umiiral. Kaya, kung ang isang nested class ay static, ibig sabihin ba nito ay maaari ka lang lumikha ng isang object ng klase na iyon?"

"Huwag hayaang malito ka ng salitang static dito. Totoo na kung ang isang variable ay idineklara bilang static, pagkatapos ay mayroon lamang isang kopya ng variable. Ngunit ang isang static na nested class ay mas katulad ng isang static na pamamaraan sa bagay na ito. Ang salitang static bago ang deklarasyon ng klase ay nagpapahiwatig na ang klase ay hindi nag-iimbak ng mga sanggunian sa mga bagay ng panlabas na klase nito."

"Ah. Ang mga normal na pamamaraan ay nag-iimbak ng isang object reference, ngunit ang mga static na pamamaraan ay hindi. Ito ay pareho sa mga static na klase, tama ba ako, Ellie?"

"Talaga. Ang iyong mabilis na pag-unawa ay kapuri-puri. Ang mga static na nested na klase ay walang mga nakatagong reference sa mga bagay ng kanilang panlabas na klase."

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

"Repasuhin nating mabuti ang halimbawang ito."

"Anong mga variable ang maaaring ma-access ng static na getAnimalCount method?"

"Yung mga static lang. Kasi static method."

"Anong mga variable ang maaaring ma-access ng getMouseCount method?"

"Parehong static at non-static. Mayroon itong nakatagong reference (ito) sa isang Zoo object."

"Tama. Kaya, ang static na nested na klase ng Mouse, tulad ng isang static na pamamaraan, ay maaaring ma-access ang mga static na variable ng Zoo class, ngunit hindi nito maa-access ang mga hindi static."

"Ligtas kaming makakagawa ng mga Mouse object, kahit na walang nagawang object ng Zoo. Narito kung paano mo magagawa iyon:"

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

"Ang klase ng Mouse ay talagang isang napaka-ordinaryong klase. Ang katotohanang ito ay idineklara sa loob ng klase ng Zoo ay nagbibigay dito ng dalawang espesyal na tampok."

1) Kapag lumilikha ng mga bagay ng isang nested class (tulad ng Mouse class) sa labas ng outer class, dapat mo ring gamitin ang dot operator upang tukuyin ang pangalan ng outer class.

"Ganito, halimbawa: Zoo.Mouse."

2) Ang klase ng Zoo.Mouse at ang mga bagay nito ay may access sa mga pribadong static na variable at pamamaraan ng klase ng Zoo (dahil ang klase ng Mouse ay idineklara din sa loob ng klase ng Zoo).

"Iyon lang para sa araw na ito."

"So dagdag na pangalan lang at iyon na?"

"Oo."

"Iyon ay mas madali kaysa sa tila noong una."