Pewarisan dan Polimorfisme · Pelajaran 6 dari 10

Polimorfisme dan override

9 menit baca · BelajarCode

Polimorfisme artinya "banyak bentuk". Variabel bertipe superclass bisa menyimpan objek subclass apa pun, dan saat metodenya dipanggil, Java menjalankan versi milik objek sebenarnya.

Override

Subclass bisa mengganti (override) metode yang diwarisinya.

Java
1class Bentuk {2    String nama() {3        return "bentuk";4    }56    double luas() {7        return 0;8    }9}1011class Persegi extends Bentuk {12    private double sisi;1314    Persegi(double sisi) {15        this.sisi = sisi;16    }1718    @Override19    String nama() {20        return "persegi";21    }2223    @Override24    double luas() {25        return sisi * sisi;26    }27}2829class Lingkaran extends Bentuk {30    private double r;3132    Lingkaran(double r) {33        this.r = r;34    }3536    @Override37    String nama() {38        return "lingkaran";39    }4041    @Override42    double luas() {43        return Math.round(Math.PI * r * r * 100) / 100.0;44    }45}4647public class Main {48    public static void main(String[] args) {49        Bentuk[] daftar = {new Persegi(4), new Lingkaran(3), new Persegi(2.5)};50        double total = 0;51        for (Bentuk b : daftar) {52            System.out.println(b.nama() + ": " + b.luas());53            total += b.luas();54        }55        System.out.println("Total luas: " + Math.round(total * 100) / 100.0);56    }57}
Keluaran
persegi: 16.0
lingkaran: 28.27
persegi: 6.25
Total luas: 50.52
  • Array bertipe Bentuk[] berisi objek Persegi dan Lingkaran.
  • b.luas() memanggil versi Persegi atau Lingkaran sesuai objeknya. Pemilihan ini terjadi saat program berjalan dan disebut dynamic dispatch.
  • Anotasi @Override meminta kompiler memeriksa bahwa metode itu memang mengganti metode induk. Salah ketik nama metode langsung ketahuan.
  • Math.round(x * 100) / 100.0 membulatkan ke dua angka desimal. Total luas juga dibulatkan, karena penjumlahan bilangan pecahan bisa menghasilkan angka seperti 50.519999999999996 akibat cara komputer menyimpan desimal.

Override atau overload?

Override dan overload
OverrideOverload
Di manaSubclass mengganti metode superclassDi kelas yang sama
Tanda tangan metodeSama persisNama sama, parameter berbeda
Dipilih saatProgram berjalanKompilasi
Contohluas() di Persegi dan Lingkarancetak(int x) dan cetak(String s)

Mengganti toString

Setiap kelas mewarisi toString() dari Object. Jika di-override, objek bisa langsung dicetak dengan println.

Java
1class Mahasiswa {2    private String nama;3    private double ipk;45    Mahasiswa(String nama, double ipk) {6        this.nama = nama;7        this.ipk = ipk;8    }910    @Override11    public String toString() {12        return "Mahasiswa[" + nama + ", IPK " + ipk + "]";13    }14}1516public class Main {17    public static void main(String[] args) {18        System.out.println(new Mahasiswa("Sinta", 3.81));19    }20}
Keluaran
Mahasiswa[Sinta, IPK 3.81]

Cek pemahaman

Variabel Bentuk b = new Lingkaran(3); lalu dipanggil b.luas(). Versi metode mana yang dijalankan?

Latihan

Hewan bersuara

Buat kelas Hewan dengan metode suara() yang mengembalikan "...". Buat subclass Kucing, Anjing, dan Ayam yang meng-override suara(). Simpan beberapa hewan dalam satu array dan cetak suaranya.

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Java online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi