extends: Kata kunci untuk mewarisi sifat class induk (superclass) ke class anak (subclass).super: Kata kunci untuk memanggil konstruktor atau method milik superclass.@Override: Menimpa implementasi method induk di class turunan.protected / private: Atribut private diwariskan tetapi tidak bisa diakses langsung, gunakan getter/setter atau modifier protected.Studi Kasus:
Sebuah perusahaan memiliki kelas induk Karyawan dengan atribut nama dan gajiPokok. Terdapat class turunan Manager yang mewarisi Karyawan dan memiliki atribut tambahan tunjangan. Buat program untuk menghitung total pendapatan manager.
Penjelasan Solusi:
Gunakan extends pada Manager, panggil konstruktor Karyawan menggunakan super(nama, gajiPokok), lalu buat method untuk menghitung total gaji (gajiPokok + tunjangan).
Java
// Superclass
class Karyawan{
protected String nama;
protected double gajiPokok;
public Karyawan(String nama, double gajiPokok){
this.nama = nama;
this.gajiPokok = gajiPokok;
}
public void tampilkanInfo(){
System.out.println("Nama: " + nama + ", Gaji Pokok: Rp" + gajiPokok);
}
}
// Subclass
class Manager extends Karyawan{
private double tunjangan;
public Manager(String nama, double gajiPokok, double tunjangan){
super(nama, gajiPokok); // Memanggil konstruktor superclass
this.tunjangan = tunjangan;
}
public double hitungTotalGaji(){
return gajiPokok + tunjangan;
}
@Override
public void tampilkanInfo(){
super.tampilkanInfo();
System.out.println("Tunjangan: Rp" + tunjangan + " | Total: Rp" + hitungTotalGaji());
}
}
Studi Kasus:
Buat kelas induk Kendaraan (atribut merk dan tahunProduksi). Turunkan menjadi kelas Mobil (tambah atribut jumlahPintu) dan Motor (tambah atribut jenisStang).
Penjelasan Solusi:
Studi kasus ini menunjukkan pewarisan hierarkis (hierarchical inheritance), di mana satu superclass memiliki beberapa subclass.
class Kendaraan{
protected String merk;
protected int tahunProduksi;
public Kendaraan(String merk, int tahunProduksi){
this.merk = merk;
this.tahunProduksi = tahunProduksi;
}
public void info(){
System.out.print("[" + tahunProduksi + "] " + merk);
}
}
class Mobil extends Kendaraan{
private int jumlahPintu;
public Mobil(String merk, int tahunProduksi, int jumlahPintu){
super(merk, tahunProduksi);
this.jumlahPintu = jumlahPintu;
}
@Override
public void info(){
super.info();
System.out.println(" (Mobil, " + jumlahPintu + " pintu)");
}
}
class Motor extends Kendaraan{
private String jenisStang;
public Motor(String merk, int tahunProduksi, String jenisStang){
super(merk, tahunProduksi);
this.jenisStang = jenisStang;
}
@Override
public void info(){
super.info();
System.out.println(" (Motor, stang: " + jenisStang + ")");
}
}