Method Overriding (@Override)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 22 dari 87.
Method overriding memungkinkan subclass menyediakan implementasinya sendiri untuk method yang sudah ditentukan di parent class. Dengan cara ini, child class menyesuaikan perilaku yang diwarisi agar sesuai dengan kebutuhan spesifiknya.
Ketika kamu melakukan override pada method, versi subclass sepenuhnya menggantikan versi parent untuk object dari subclass tersebut. Method harus memiliki nama dan parameter yang sama dengan method parent, serta tipe pengembalian yang sama dengan (atau subtipe dari) tipe pengembalian parent:
public class Animal {
public void makeSound() {
System.out.println("Some generic sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof!");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow!");
}
}Anotasi @Override memberi tahu compiler bahwa kamu bermaksud melakukan override pada method induk. Meskipun opsional, anotasi ini sangat disarankan karena compiler akan mendeteksi error jika kamu tidak sengaja salah mengeja nama method atau menggunakan parameter yang salah:
@Override
public void makeSound() { } // Benar, compiler memverifikasi ini
public void makesound() { } // Salah ketik! Ini membuat method baru, bukan menimpa method yang adaSaat kamu memanggil method yang ditimpa, Java menjalankan versi yang dimiliki oleh tipe object sebenarnya:
Dog dog = new Dog();
dog.makeSound(); // output: Woof!
Cat cat = new Cat();
cat.makeSound(); // output: Meow!Ingat dari pelajaran sebelumnya bahwa kamu dapat menggunakan super.methodName() di dalam method yang ditimpa jika kamu tetap ingin menyertakan perilaku dari induknya bersama kodemu yang baru.
Tantangan
MudahMari kita buat sistem notifikasi yang menunjukkan cara subclass dapat meng-override method parent untuk memberikan perilaku khususnya sendiri. Kamu akan melihat cara anotasi @Override membantu menemukan kesalahan dan cara setiap subclass dapat menyesuaikan method yang diwarisi.
Kamu akan membuat tiga file untuk mengatur kodemu:
Notification.java: Buat class parent yang mewakili notifikasi umum. Class ini harus memiliki:- Field private untuk
message(String) - Constructor yang menerima message
- Method
getMessage()yang mengembalikan message - Method
send()yang mencetak:Sending notification: [message]
- Field private untuk
EmailNotification.java: Buat subclass yang memperluas Notification dan menyesuaikan cara notifikasi dikirim melalui email:- Field private untuk alamat email
recipient(String) - Constructor yang menerima message dan recipient, menggunakan
super(message)untuk bagian parent - Override method
send()menggunakan anotasi@Overrideuntuk mencetak:Emailing [recipient]: [message]
- Field private untuk alamat email
Main.java: Tunjukkan cara nama method yang sama menghasilkan perilaku berbeda, bergantung pada tipe object. Kamu akan menerima dua input: message dan alamat email. Buat Notification biasa dan EmailNotification dengan message yang sama, lalu panggilsend()pada masing-masing untuk melihat output yang berbeda.
Kamu akan menerima dua input: message (String) dan alamat email recipient (String).
Output-mu harus menampilkan dua baris, pertama dari method send() milik parent, lalu dari versi yang di-override di EmailNotification. Ini menunjukkan cara overriding method memungkinkan subclass mengganti perilaku yang diwarisi dengan implementasinya sendiri.
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String message = scanner.nextLine();
String recipient = scanner.nextLine();
// TODO: Buat object Notification dengan message
// TODO: Buat object EmailNotification dengan message dan recipient
// TODO: Panggil send() pada object Notification
// TODO: Panggil send() pada object EmailNotification
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online