Memahami Kelas Bersarang Statis Java: Penggunaan, Perbedaan, dan Contoh
Kelas Bersarang Statis Java
Temukan bagaimana kelas bersarang statis Java bekerja, bagaimana mereka berbeda dari inner class, dan kapan menggunakannya dengan contoh kode praktis.
Di Java, sebuah kelas dapat didefinisikan di dalam kelas lain. Ini disebut nested classes dan datang dalam dua bentuk:
- Non-static nested classes (inner classes)
- Static nested classes
Sementara inner class telah dibahas dalam tutorial kami sebelumnya, artikel ini berfokus pada static nested classes.
Kelas Bersarang Statis Java
Untuk mendeklarasikan nested class sebagai static, cukup tambahkan kata kunci static:
class Animal { static class Mammal { // static and non-static members of Mammal } // members of Animal }
Catatan: Hanya nested classes yang dapat dideklarasikan static; top-level classes tidak dapat.
Seperti kelas lainnya, static nested class dapat berisi anggota static dan instance.
Karena ia merupakan anggota static dari outer classnya, Anda dapat mengakses static nested class tanpa membuat instance outer class.
Contoh: Static Nested Class
class Animal { // inner class class Reptile { public void displayInfo() { System.out.println("Saya adalah seekor reptil."); } } // static nested class static class Mammal { public void displayInfo() { System.out.println("Saya adalah seekor mamalia."); } } } class Main { public static void main(String[] args) { // buat instance outer class Animal animal = new Animal(); // buat instance non-static inner class Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // buat instance static nested class Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); } }
Output
Saya adalah seekor reptil. Saya adalah seekor mamalia.
Pada kode di atas, Mammal adalah static nested class sementara Reptile adalah inner class.
Perhatikan sintaks instantiation yang berbeda:
- Non-static inner class:
Animal.Reptile reptile = animal.new Reptile(); - Static nested class:
Animal.Mammal mammal = new Animal.Mammal();
Mengakses Anggota Outer Class
Karena static nested class terkait dengan outer classnya, ia hanya dapat mengakses anggota static outer class. Upaya untuk mereferensikan instance members akan menghasilkan kesalahan kompilasi.
Contoh: Mencoba Memanggil Metode Non-static
class Animal { static class Mammal { public void displayInfo() { System.out.println("Saya adalah seekor mamalia."); } } class Reptile { public void displayInfo() { System.out.println("Saya adalah seekor reptil."); } } public void eat() { System.out.println("Saya makan makanan."); } } class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); mammal.eat(); // ❌ Kesalahan waktu kompilasi } }
Output
Main.java:28: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 1
Kesalahan terjadi karena mammal adalah instance static nested class dan tidak dapat memanggil metode non-static eat() dari Animal.
Static Top-Level Class?
Java melarang static top-level classes. Hanya nested classes yang dapat dideklarasikan static. Kode berikut menunjukkan kesalahan kompiler:
static class Animal { public static void displayInfo() { System.out.println("Saya adalah seekor hewan"); } } class Main { public static void main(String[] args) { Animal.displayInfo(); } }
Output
Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1 Ini mengonfirmasi bahwa hanya nested classes yang dapat static.