Inheritance

Inheritance itu mekanisme di mana satu class (subclass/child class) bisa mewarisi field dan method dari class lain (superclass/parent class). Tujuannya buat reuse code dan bikin hubungan "is-a" antar class.
class Superclass {
// field dan method
}
class Subclass extends Superclass {
// field dan method tambahan
}
Superclass dan Subclass
- Superclass (parent): class yang diwarisi
- Subclass (child): class yang mewarisi, ditandai keyword
extends
class Hewan {
String nama;
void makan() {
System.out.println(nama + " sedang makan");
}
}
class Kucing extends Hewan {
void mengeong() {
System.out.println(nama + " mengeong");
}
}
Kucing k = new Kucing();
k.nama = "Milo";
k.makan(); // dari Hewan
k.mengeong(); // dari Kucing
Keyword super
Dipakai buat akses field, method, atau constructor dari superclass.
class Hewan {
Hewan() {
System.out.println("Hewan dibuat");
}
}
class Kucing extends Hewan {
Kucing() {
super(); // panggil constructor Hewan
System.out.println("Kucing dibuat");
}
}
Method Overriding
Subclass bisa nulis ulang method dari superclass dengan signature yang sama. Ditandai anotasi @Override (opsional tapi disarankan).
class Hewan {
void bersuara() {
System.out.println("Hewan bersuara");
}
}
class Kucing extends Hewan {
@Override
void bersuara() {
System.out.println("Meong");
}
}
Single Inheritance
Java cuma support single inheritance buat class (satu subclass cuma bisa extends satu superclass). Kalau butuh multiple inheritance, pakai interface.
Access Modifier dan Inheritance
publicdanprotected: diwarisi ke subclassprivate: tidak diwarisi, gak bisa diakses langsung dari subclass- Constructor tidak diwariskan, tapi bisa dipanggil pakai
super()
Keyword final
final class: gak bisa di-extendsfinal method: gak bisa di-override
final class Hewan { }
Instance Of
instanceof adalah operator biner yang digunakan untuk menguji apakah suatu objek merupakan tipe tertentu. Hasil dari operasi ini adalah true atau false. Operator ini juga dikenal sebagai operator perbandingan tipe karena membandingkan instance dengan suatu tipe.
Sebelum melakukan casting terhadap objek yang belum diketahui tipenya, pemeriksaan menggunakan instanceof harus selalu dilakukan. Hal ini membantu menghindari ClassCastException saat program dijalankan (runtime).
Sintaks dasar operator instanceof adalah:
(object) instanceof (type)
Sekarang mari kita lihat contoh dasar penggunaan operator instanceof. Pertama, kita akan membuat sebuah kelas Round:
public class Round {
// detail implementasi
}
Selanjutnya, kita akan membuat kelas Ring yang mewarisi (extends) kelas Round:
public class Ring extends Round {
// detail implementasi
}
Kita dapat menggunakan instanceof untuk memeriksa apakah sebuah instance dari Ring merupakan tipe Round:
@Test
void givenWhenInstanceIsCorrect_thenReturnTrue() {
Ring ring = new Ring();
assertTrue(ring instanceof Round);
}
