class KelasLuar { … class KelasTersarang { … } }
Anda juga dapat mendeklarasikan kelas tersarang dengan modifier public, protected, private dan juga static. Berikut ini adalah ilustrasi kelas tersarang yang dideklarasikan dengan modifier static:
class KelasLuar { … static class KelasTersarangStatik { … } class KelasTersarang { … } }
Contoh program berikut ini memberi pemahaman kelas tersarang di Java. Contoh program terdiri dari dua kelas yaitu KelasLuar dan DemoKelasLuar. Kelas KelasLuar adalah definisi kelas baru untuk membuat obyek dari kelas tersebut, sedangkan kelas DemoKelasLuar adalah kelas untuk menguji kelas KelasLuar.
Kedua kelas tersebut dimaksudkan untuk memberi gambaran lebih jelas bagaimana sebuah kelas dapat didefinisikan di dalam kelas yang lain. Kelas DemoKelasLuar akan menampilkan string melalui pemanggilan metoda baik yang ada di kelas KelasLuar maupun yang ada di kelas KelasDalam.
1. Kelas KelasLuar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // Nama file : KelasLuar.java // Mendemonstrasikan kelas di dalam kelas // Mendefinisikan KelasLuar public class KelasLuar { private String sl = "String di KelasLuar"; KelasDalam kd = new KelasDalam(); // Metoda di KelasLuar public void getSl() { System.out.println(sl); } public void getStrKelasDalam() { System.out.println(kd.sd); } // Deklarasi KelasDalam public class KelasDalam { private String sd = "String di KelasDalam"; // Metoda di Kelasdalam public void getSd() { System.out.println(sd); } public void getStrKelasLuar() { System.out.println(sl); } } } |
2. Kelas DemoKelasLuar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Nama file : DemoKelasLuar.java // Mendemonstrasikan kelas di dalam kelas // Deklarasi kelas public class DemoKelasLuar { public static void main(String[ ] args) { System.out.println(); KelasLuar kl = new KelasLuar(); KelasLuar.KelasDalam kd = kl.new KelasDalam(); kl.getSl(); kd.getSd(); kl.getStrKelasDalam(); kd.getStrKelasLuar(); } } |
Dari dua contoh program di atas, dapat dijelaskan bahwa kelas KelasDalam dapat mengakses data field maupun metoda yang ada di kelas KelasLuar sebagaimana yang ada di pernyataan baris nomor 30 dari kode program kelas KelasLuar.
Sedangkan kelas luar, dapat mengakses data field maupun metoda dari kelas KelasDalam dengan menggunakan variabel yang mengacu ke obyek dari kelas KelasDalam sebagaimana yang ada di pernyataan baris nomor 16 dari kode program kelas KelasLuar.
Bila kode program tersebut dikompilasi, kelas KelasLuar akan menghasilkan dua buah file bytecode berekstensi .class. KelasLuar$KelasDalam.class adalah file bytecode untuk kelas tersarang. Karena fungsi kelas tersarang adalah mendukung kerja kelas luar, maka kelas tersarang akan dikompilasi menjadi file bytecode dengan format NamaKelasLuar$NamaKelasDalam.
Kelas tersarang yang dideklarasikan dengan modifier static hanya dapat mengakses data field dan metoda (member) dari kelas luar yang dideklarasikan dengan modifier static. Kelas tersarang yang tidak dideklarasikan dengan modifier static dapat mengakses data field dan metoda baik yang dideklarasikan dengan modifier static maupun tidak (nonstatic modifier).