Menguasai Method Overriding di Java
Menguasai Method Overriding di Java
Jelajahi method overriding Java dengan contoh praktis, aturan kunci, dan kata kunci super yang canggih.
Minggu lalu kita membahas inheritance, fitur inti OOP yang memungkinkan subclass mewarisi properti dan perilaku dari superclass. Sekarang kita akan menyelami method overriding—saat subclass menyediakan implementasinya sendiri dari metode yang sudah didefinisikan di kelas induknya.
Contoh 1: Method Overriding Dasar
class Animal { public void displayInfo() { System.out.println("Saya adalah seekor hewan."); } } class Dog extends Animal { @Override public void displayInfo() { System.out.println("Saya adalah seekor anjing."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Output:
Saya adalah seekor anjing.
Dalam cuplikan ini, baik Animal maupun Dog mendeklarasikan displayInfo(). Saat instance Dog memanggilnya, implementasi subclass yang berjalan, menunjukkan overriding.
Perhatikan anotasi @Override. Ini memberitahu kompiler bahwa metode harus menggantikan versi superclass; jika tanda tangannya tidak cocok, kompiler akan melempar kesalahan. Meskipun tidak wajib, ini adalah praktik terbaik yang melindungi dari kesalahan yang tidak sengaja.
Aturan Overriding Java
- Nama metode, tipe pengembalian, dan daftar parameter harus identik di kedua kelas.
- Metode final atau static tidak dapat di-override.
- Metode abstrak di superclass harus di-override oleh subclass konkretnya.
Menggunakan super untuk Memanggil Metode Superclass
Apakah kita masih dapat memanggil metode induk setelah meng-override? Tentu—gunakan kata kunci super.
Contoh 2: Memanfaatkan super
class Animal { public void displayInfo() { System.out.println("Saya adalah seekor hewan."); } } class Dog extends Animal { public void displayInfo() { super.displayInfo(); System.out.println("Saya adalah seekor anjing."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Output:
Saya adalah seekor hewan. Saya adalah seekor anjing.
Di sini, Dog pertama kali memanggil Animal.displayInfo() melalui super, lalu menambahkan pesannya sendiri.
Ingat, konstruktor tidak diwarisi, jadi tidak ada “constructor overriding.” Namun, subclass dapat memanggil konstruktor superclass dengan super()—lihat panduan kata kunci super Java.
Level Akses saat Meng-override
Metode yang di-override dapat berbeda dalam visibilitas, tetapi hanya dalam cara yang memperluas akses.
Jika metode superclass adalah protected, subclass dapat mendeklarasikannya protected atau public, tetapi tidak private.
Contoh 3: Mengubah Visibilitas
class Animal { protected void displayInfo() { System.out.println("Saya adalah seekor hewan."); } } class Dog extends Animal { public void displayInfo() { System.out.println("Saya adalah seekor anjing."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Output:
Saya adalah seekor anjing.
Karena public menawarkan akses yang lebih luas dari protected, override ini valid.
Overriding Metode Abstrak
Kelas abstrak sering mendeklarasikan metode tanpa badan. Setiap subclass konkret harus menyediakan implementasi; jika tidak, kompiler akan menandai kesalahan. Kita akan menjelajahi kelas abstrak secara mendalam dalam tutorial mendatang.