Menguasai Warisan Java: Konsep, Jenis, dan Contoh Praktis
Menguasai Warisan Java
Jelajahi warisan Java secara mendalam—pahami prinsipnya, contoh dunia nyata, dan cara menerapkannya untuk kode yang lebih bersih dan dapat digunakan kembali.
Warisan adalah sumbu pemrograman berorientasi objek yang memungkinkan Anda membuat kelas baru berdasarkan kelas yang sudah ada.
Kelas yang diperturunkan disebut subclass (anak atau derived), sementara kelas yang di-extend disebut superclass (induk atau base). Kata kunci extends melakukan hubungan ini.
class Animal { // methods and fields } class Dog extends Animal { // Dog inherits fields and methods from Animal }
Di sini, Dog mewarisi semua anggota Animal—subclass memperoleh fungsionalitas induk.
Contoh 1: Warisan Dasar
class Animal { String name; public void eat() { System.out.println("Saya bisa makan"); } } class Dog extends Animal { public void display() { System.out.println("Namaku adalah " + name); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.name = "Rohu"; labrador.display(); labrador.eat(); } }
Output
Namaku adalah Rohu Saya bisa makan
Dalam contoh ini, Dog mewarisi name dan eat() dari Animal, sehingga objek Dog dapat mengaksesnya secara langsung.
Hubungan is-a
Warisan di Java mewakili hubungan is-a: subclass adalah bentuk khusus dari superclass-nya.
Mobil adalah Kendaraan
Jeruk adalah Buah
Bedah adalah Dokter
Anjing adalah Hewan
Hierarki alami ini membenarkan penggunaan warisan.
Method Overriding
Saat subclass mendefinisikan metode dengan tanda tangan yang sama seperti superclassnya, metode subclass meng-override versi superclass. Ini memungkinkan polimorfisme runtime.
Contoh 2: Overriding eat()
class Animal { public void eat() { System.out.println("Saya bisa makan"); } } class Dog extends Animal { @Override public void eat() { System.out.println("Saya makan makanan anjing"); } public void bark() { System.out.println("Saya bisa mengeong"); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.eat(); labrador.bark(); } }
Output
Saya makan makanan anjing Saya bisa mengeong
Pemanggilan eat() pada labrador terpadu ke metode yang di-override di Dog.
Tips: Anotasi @Override opsional namun sangat direkomendasikan—ini memastikan kompiler memeriksa bahwa Anda benar-benar meng-override metode.
Menggunakan super untuk Mengakses Superclass
Saat meng-override, kata kunci super memungkinkan Anda memanggil implementasi induk.
Contoh 3: super dalam eat()
class Animal { public void eat() { System.out.println("Saya bisa makan"); } } class Dog extends Animal { @Override public void eat() { super.eat(); System.out.println("Saya makan makanan anjing"); } public void bark() { System.out.println("Saya bisa mengeong"); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.eat(); labrador.bark(); } }
Output
Saya bisa makan Saya makan makanan anjing Saya bisa mengeong
Di sini, super.eat() memanggil metode yang didefinisikan di Animal sebelum mengeksekusi logika subclass.
Demikian pula, super dapat memanggil konstruktor superclass.
Anggota Protected dalam Warisan
Field atau metode yang ditandai protected dapat diakses oleh subclass terlepas dari paket.
Contoh 4: Mengakses Anggota Protected
class Animal { protected String name; protected void display() { System.out.println("Saya adalah seekor hewan."); } } class Dog extends Animal { public void getInfo() { System.out.println("Namaku adalah " + name); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); } }
Output
Saya adalah seekor hewan. Namaku adalah Rocky
Subclass dapat dengan bebas membaca dan memodifikasi field protected name dan memanggil display().
Mengapa Menggunakan Warisan?
Penggunaan Ulang Kode: Kelas anak secara otomatis mewarisi semua anggota public dan protected dari induknya.