Pewarisan dan Polimorfisme · Pelajaran 5 dari 10
Pewarisan dengan extends
9 menit baca · BelajarCode
Pewarisan (inheritance) memungkinkan sebuah kelas mewarisi atribut dan metode kelas lain. Kelas induk disebut superclass, kelas turunan disebut subclass. Hubungannya adalah "adalah sejenis": mobil adalah sejenis kendaraan.
1class Kendaraan {2 protected String merek;3 protected int tahun;45 Kendaraan(String merek, int tahun) {6 this.merek = merek;7 this.tahun = tahun;8 }910 String info() {11 return merek + " (" + tahun + ")";12 }1314 int umur(int tahunSekarang) {15 return tahunSekarang - tahun;16 }17}1819class Mobil extends Kendaraan {20 private int kursi;2122 Mobil(String merek, int tahun, int kursi) {23 super(merek, tahun);24 this.kursi = kursi;25 }2627 int getKursi() {28 return kursi;29 }30}3132class Motor extends Kendaraan {33 Motor(String merek, int tahun) {34 super(merek, tahun);35 }3637 String bunyi() {38 return "Brum brum!";39 }40}4142public class Main {43 public static void main(String[] args) {44 Mobil m = new Mobil("Mobil Keluarga", 2019, 7);45 Motor t = new Motor("Motor Bebek", 2022);46 System.out.println(m.info() + ", " + m.getKursi() + " kursi, umur " + m.umur(2026) + " tahun");47 System.out.println(t.info() + ", " + t.bunyi());48 }49}Mobil Keluarga (2019), 7 kursi, umur 7 tahun Motor Bebek (2022), Brum brum!
extendsmembuatMobildanMotormewarisimerek,tahun,info(), danumur()dariKendaraan.super(merek, tahun)memanggil konstruktor superclass. Panggilan ini harus menjadi baris pertama konstruktor subclass.protectedmembuat atribut bisa diakses oleh subclass.- Subclass boleh menambah atribut dan metode sendiri, seperti
kursidanbunyi().
Satu induk saja
Di Java, sebuah kelas hanya boleh extends satu kelas. Semua kelas, langsung maupun tidak langsung, adalah turunan dari kelas Object. Untuk mendapatkan kemampuan dari banyak sumber, Java memakai interface, yang dibahas dua pelajaran lagi.
Jangan memaksakan pewarisan
Pakai pewarisan hanya jika hubungan "adalah sejenis" benar-benar berlaku. Mobil punya mesin, bukan sejenis mesin, jadi Mobil sebaiknya menyimpan objek Mesin sebagai atribut. Cara ini disebut komposisi, dan sering lebih fleksibel daripada pewarisan.
Cek pemahaman
Pada kode di atas, kenapa objek Motor bisa memanggil metode info() padahal kelas Motor tidak menulisnya?
Latihan
Pegawai dan dosen
Buat kelas Pegawai dengan nama dan gaji pokok, serta metode gajiBulanan() yang mengembalikan gaji pokok. Buat subclass Dosen yang menambah atribut jumlah SKS mengajar dan metode honorMengajar() sebesar Rp150.000 per SKS.
Pembahasan
1class Pegawai {2 protected String nama;3 protected long gajiPokok;45 Pegawai(String nama, long gajiPokok) {6 this.nama = nama;7 this.gajiPokok = gajiPokok;8 }910 long gajiBulanan() {11 return gajiPokok;12 }13}1415class Dosen extends Pegawai {16 private int sks;1718 Dosen(String nama, long gajiPokok, int sks) {19 super(nama, gajiPokok);20 this.sks = sks;21 }2223 long honorMengajar() {24 return sks * 150000L;25 }26}2728public class Main {29 public static void main(String[] args) {30 Dosen d = new Dosen("Dr. Ratna", 6000000, 12);31 System.out.println(d.nama + ": gaji pokok Rp" + d.gajiBulanan() + ", honor Rp" + d.honorMengajar());32 }33}Dr. Ratna: gaji pokok Rp6000000, honor Rp1800000
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Java online.