"Jadi, topik nomor dua adalah kelas bersarang statis. Ingatlah bahwa kelas bersarang non-statis disebut kelas dalam .
"Mari kita pahami apa arti kata statis dalam konteks deklarasi kelas bersarang. Bagaimana menurut Anda?"
"Jika sebuah variabel dideklarasikan sebagai statis, maka hanya ada satu salinan dari variabel tersebut. Jadi, jika kelas bersarang bersifat statis, apakah itu berarti Anda hanya dapat membuat satu objek dari kelas itu?"
"Jangan biarkan kata statis membingungkan Anda di sini. Memang benar bahwa jika suatu variabel dideklarasikan sebagai statis, maka hanya ada satu salinan dari variabel tersebut. Tetapi kelas bersarang statis lebih seperti metode statis dalam hal ini. The kata statis sebelum deklarasi kelas menunjukkan bahwa kelas tidak menyimpan referensi ke objek kelas luarnya."
"Ah. Metode normal secara implisit menyimpan referensi objek, tetapi metode statis tidak. Itu sama dengan kelas statis, benarkan, Ellie?"
"Tentu saja. Pemahaman cepat Anda patut dipuji. Kelas bersarang statis tidak memiliki referensi tersembunyi ke objek kelas luarnya."
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 tinjau contoh ini dengan hati-hati."
"Variabel apa yang dapat diakses oleh metode statis getAnimalCount?"
"Hanya yang statis. Karena ini adalah metode statis."
"Variabel apa yang dapat diakses oleh metode getMouseCount?"
"Baik yang statis maupun non-statis. Ia memiliki referensi tersembunyi (ini) ke objek Kebun Binatang."
"Betul. Jadi, kelas Mouse bersarang statis, seperti metode statis, dapat mengakses variabel statis kelas Kebun Binatang, tetapi tidak dapat mengakses variabel non-statis."
"Kita dapat membuat objek Mouse dengan aman, bahkan jika tidak ada satu pun objek Zoo yang telah dibuat. Inilah cara melakukannya:"
class Home
{
public static void main(String[] args)
{
Zoo.Mouse mouse = new Zoo.Mouse();
}
}
"Kelas Mouse sebenarnya adalah kelas yang sangat biasa. Fakta bahwa ia dideklarasikan di dalam kelas Zoo memberikannya dua fitur khusus."
1) Saat membuat objek dari kelas bersarang (seperti kelas Mouse) di luar kelas luar, Anda juga harus menggunakan operator titik untuk menentukan nama kelas luar.
"Seperti ini, contohnya: Zoo.Mouse."
2) Kelas Zoo.Mouse dan objeknya memiliki akses ke variabel dan metode statis privat kelas Zoo (karena kelas Mouse juga dideklarasikan di dalam kelas Zoo).
"Cukup untuk hari ini."
"Jadi hanya nama tambahan dan hanya itu?"
"Ya."
"Itu bahkan lebih mudah daripada yang terlihat pada awalnya."
GO TO FULL VERSION