Kelas bersarang statik - 1

"Jadi, topik nombor dua ialah kelas bersarang statik. Ingat bahawa kelas bersarang bukan statik dipanggil kelas dalam .

"Mari kita fikirkan maksud perkataan statik dalam konteks perisytiharan kelas bersarang. Apa pendapat anda?"

"Jika pembolehubah diisytiharkan sebagai statik, maka hanya satu salinan pembolehubah wujud. Jadi, jika kelas bersarang adalah statik, adakah itu bermakna anda hanya boleh mencipta satu objek kelas itu?"

"Jangan biarkan perkataan statik mengelirukan anda di sini. Memang benar jika pembolehubah diisytiharkan sebagai statik, maka hanya terdapat satu salinan pembolehubah itu. Tetapi kelas bersarang statik lebih seperti kaedah statik dalam hal ini. perkataan statik sebelum pengisytiharan kelas menunjukkan bahawa kelas tidak menyimpan rujukan kepada objek kelas luarnya."

"Ah. Kaedah biasa secara tersirat menyimpan rujukan objek, tetapi kaedah statik tidak. Ia sama dengan kelas statik, betulkah saya, Ellie?"

"Sudah tentu. Pemahaman cepat anda patut dipuji. Kelas bersarang statik tidak mempunyai rujukan tersembunyi kepada objek kelas luar mereka."

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

"Mari kita semak contoh ini dengan teliti."

"Apakah pembolehubah yang boleh diakses oleh kaedah getAnimalCount statik?"

"Hanya yang statik. Kerana ia adalah kaedah statik."

"Apakah pembolehubah yang boleh diakses oleh kaedah getMouseCount?"

"Kedua-dua yang statik dan tidak statik. Ia mempunyai rujukan tersembunyi (ini) kepada objek Zoo."

"Betul. Jadi, kelas Tetikus bersarang statik, seperti kaedah statik, boleh mengakses pembolehubah statik kelas Zoo, tetapi ia tidak boleh mengakses pembolehubah bukan statik."

"Kami boleh mencipta objek Tetikus dengan selamat, walaupun tiada satu pun objek Zoo telah dibuat. Begini cara anda boleh melakukannya:"

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

"Kelas Mouse sebenarnya adalah kelas yang sangat biasa. Hakikat bahawa ia diisytiharkan di dalam kelas Zoo memberikannya dua ciri istimewa."

1) Apabila mencipta objek kelas bersarang (seperti kelas Mouse) di luar kelas luar, anda juga mesti menggunakan operator titik untuk menentukan nama kelas luar.

"Seperti ini, contohnya: Zoo.Mouse."

2) Kelas Zoo.Mouse dan objeknya mempunyai akses kepada pembolehubah dan kaedah statik peribadi kelas Zoo (kerana kelas Mouse juga diisytiharkan di dalam kelas Zoo).

"Itu sahaja untuk hari ini."

"Jadi hanya nama tambahan dan itu sahaja?"

"Ya."

"Itu lebih mudah daripada yang kelihatan pada mulanya."