Dalam tutorial ini, Anda akan belajar tentang kelas statis bersarang dengan bantuan contoh. Anda juga akan belajar tentang bagaimana kelas statis berbeda dari kelas dalam.
Seperti yang dipelajari di tutorial sebelumnya, kita bisa memiliki kelas di dalam kelas lain di Java. Kelas semacam itu dikenal sebagai kelas bersarang. Di Java, kelas bertingkat terdiri dari dua jenis:
- Kelas non-statis bersarang (kelas dalam)
- Kelas statis bersarang.
Kami telah membahas kelas-kelas dalam di tutorial sebelumnya. Kunjungi Java Nested Class jika Anda ingin mempelajari tentang inner class.
Dalam tutorial ini, kita akan belajar tentang kelas statis bersarang.
Kelas Statis Bertingkat Java
Kami menggunakan kata kunci static
untuk membuat kelas bersarang kami statis.
Catatan: Di Java, hanya kelas bertingkat yang diizinkan untuk menjadi statis.
Seperti kelas biasa, kelas bertingkat statis dapat menyertakan bidang dan metode statis dan non-statis. Sebagai contoh,
Class Animal ( static class Mammal ( // static and non-static members of Mammal ) // members of Animal )
Kelas bertingkat statis dikaitkan dengan kelas luar.
Untuk mengakses kelas bertingkat statis, kita tidak membutuhkan objek dari kelas luar.
Contoh: Kelas Bersarang Statis
class Animal ( // inner class class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) // static class static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) ) class Main ( public static void main(String() args) ( // object creation of the outer class Animal animal = new Animal(); // object creation of the non-static class Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // object creation of the static nested class Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); ) )
Keluaran
Saya adalah seekor reptil. Saya mamalia
Dalam program di atas, kami memiliki dua kelas Mamalia dan Reptil bersarang di dalam kelas Hewan.
Untuk membuat objek dari kelas Reptil non-statis, kami telah menggunakan
Animal.Reptile reptile = animal.new Reptile()
Untuk membuat objek Mammal kelas statis, kami telah menggunakan
Animal.Mammal mammal = new Animal.Mammal()
Mengakses Anggota Kelas Luar
Di Java, kelas bertingkat statis dikaitkan dengan kelas luar. Inilah sebabnya mengapa kelas bertingkat statis hanya dapat mengakses anggota kelas (bidang dan metode statis) dari kelas luar.
Mari kita lihat apa yang akan terjadi jika kita mencoba mengakses bidang non-statis dan metode kelas luar.
Contoh: Mengakses anggota non-statis
class Animal ( static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) public void eat() ( System.out.println("I eat food."); ) ) 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(); ) )
Keluaran
Main.java:28: error: tidak dapat menemukan simbol mamalia.eat (); simbol: method eat () location: variabel mamalia tipe Mammal 1 error compiler exit status 1
Dalam contoh di atas, kami telah membuat metode non-statis eat()
di dalam kelas Animal.
Sekarang, jika kita mencoba mengakses eat()
menggunakan objek mamalia, kompilator menunjukkan kesalahan.
Itu karena mamalia adalah objek dari kelas statis dan kita tidak dapat mengakses metode non-statis dari kelas statis.
Kelas Tingkat Atas Statis
Seperti disebutkan di atas, hanya kelas bersarang yang bisa statis. Kami tidak dapat memiliki kelas tingkat atas statis.
Mari kita lihat apa yang akan terjadi jika kita mencoba membuat kelas tingkat atas statis.
static class Animal ( public static void displayInfo() ( System.out.println("I am an animal"); ) ) class Main ( public static void main(String() args) ( Animal.displayInfo(); ) )
Keluaran
Main.java:1: error: pengubah statis tidak diizinkan di sini kelas statis Hewan (1 status keluar penyusun kesalahan 1
Dalam contoh di atas, kami telah mencoba membuat Animal kelas statis. Karena Java tidak mengizinkan kelas tingkat atas statis, kita akan mendapatkan kesalahan.