Menguasai Kata Kunci super Java: Penggunaan Lanjutan dan Contoh Praktis
Menguasai Kata Kunci super Java: Penggunaan Lanjutan dan Contoh Praktis
Temukan bagaimana kata kunci super membuka kemampuan pewarisan yang canggih di Java, dengan contoh yang jelas dan panduan ahli.
Kata kunci super adalah sumbu model pewarisan Java, memungkinkan subclass untuk mereferensikan anggota—field, metode, dan konstruktor—dari superclass langsungnya. Memahami nuansanya esensial untuk menulis kode yang bersih dan mudah dipelihara.
Penggunaan Utama super
- Memanggil metode superclass yang di-override.
- Mengakses field superclass saat di-shadow oleh field subclass.
- Secara ekses memanggil konstruktor superclass dari konstruktor subclass.
Mari kita selami setiap skenario dengan contoh kode.
1. Memanggil Metode Superclass yang Di-override
Saat subclass meng-override suatu metode, versi superclass tetap dapat diakses melalui super.methodName(). Ini krusial untuk memperluas perilaku tanpa kehilangan fungsionalitas asli.
Contoh: Method Overriding dan super
class Animal { public void display() { System.out.println("Saya adalah seekor hewan"); } } class Dog extends Animal { @Override public void display() { System.out.println("Saya adalah seekor anjing"); } public void printMessage() { display(); // Memanggil Dog.display() super.display(); // Memanggil Animal.display() } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.printMessage(); } }
Output:
Saya adalah seekor anjing Saya adalah seekor hewan
Menggunakan super.display() memastikan implementasi superclass dieksekusi, yang berguna saat memperluas fungsionalitas daripada menggantinya.
2. Mengakses Field Superclass yang Di-shadow
Jika baik superclass maupun subclass mendeklarasikan field dengan nama yang sama, field subclass akan me-shadow field superclass. super.fieldName memungkinkan Anda mereferensikan field asli.
Contoh: Field Shadowing
class Animal { protected String type = "animal"; } class Dog extends Animal { public String type = "mammal"; public void printType() { System.out.println("Saya adalah " + type); // Dog.type System.out.println("Saya adalah " + super.type); // Animal.type } } public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.printType(); } }
Output:
Saya adalah mammal Saya adalah animal
3. Menggunakan super() untuk Memanggil Konstruktor Superclass
Konstruktor tidak diwarisi, tetapi subclass dapat memanggil konstruktor superclass menggunakan super(). Ini harus menjadi pernyataan pertama dalam konstruktor subclass dan diperlukan saat superclass tidak memiliki konstruktor tanpa argumen atau saat Anda perlu melewati argumen.
Contoh 1: Pemanggilan Konstruktor Default
class Animal { Animal() { System.out.println("Saya adalah seekor hewan"); } } class Dog extends Animal { Dog() { super(); System.out.println("Saya adalah seekor anjing"); } } public class Main { public static void main(String[] args) { new Dog(); } }
Output:
Saya adalah seekor hewan Saya adalah seekor anjing
Contoh 2: Pemanggilan Konstruktor Berparameter
class Animal { Animal(String type) { System.out.println("Tipe: " + type); } } class Dog extends Animal { Dog() { super("Animal"); System.out.println("Saya adalah seekor anjing"); } } public class Main { public static void main(String[] args) { new Dog(); } }
Output:
Tipe: Animal Saya adalah seekor anjing
Dalam kasus berparameter, kompiler tidak dapat memanggil konstruktor non-default secara otomatis, jadi super(arguments) wajib.
Menguasai kata kunci super memberdayakan Anda untuk menulis hierarki pewarisan yang kokoh, memastikan logika yang di-override tetap dapat diakses dan konstruktor diinisialisasi dengan benar. Teknik-teknik ini esensial untuk aplikasi Java yang scalable dan selaras dengan praktik terbaik yang direkomendasikan oleh para ahli industri.