Konsep OOP : Polymorphism

Kegunaan kedua dari inheritance adalah polymorphism (banyak bentuk). Bagaimana penggunaanya?

Kita gunakan contoh dari post sebelumnya tentang Inheritance.

Misal kita punya class Peternakan yang akan memanggil method makan() dari semua object Hewan. Kita tidak tahu class Hewan sudah diturunkan menjadi apa saja: bisa ayam, bebek, dan lain-lain. Tapi, satu hal yang pasti, jika mereka adalah subclass dari Hewan, maka mereka mempunyai method makan().

public class Peternakan {

public static void main(String[] args) {

Hewan hewan = new Hewan();

Bebek bebekKloset = new Bebek();

Ayam ayamKampus = new Ayam();

kegiatanHewan(hewan);

kegiatanHewan(bebekKloset);

}

public void kegiatanHewan(Hewan ternak) {

ternak.makan();

}

}

Jika terlebih dahulu dideklarasikan bahwa Ayam dan Bebek adalah subclass dari Hewan dan method makan ada di Hewan dan memproduksi output berupa string “Makan!”, maka output kode di atas adalah:

Makan!

Makan!

Contoh di atas adalah polymorphism. Class Hewan mempunyai banyak bentuk (polymorphism), bisa berupa Bebek maupun Ayam sehingga jika ada method public void kegiatanHewan(Hewan ternak) yang mengambil class Hewan sebagai parameternya, maka Bebek dan Ayam dapat menjadi argumen yang valid karena Bebek dan Ayam adalah Hewan.

Selanjutnya, misalkan kita punya kode sebagai berikut:

Hewan bebekKloset = new Bebek();

apakah compiler akan mengeluarkan error? Jawabannya tidak. Karena Bebek adalah Hewan. Jika demikian pada heap, object apa yang ada? Bebek atau Hewan? Jika ada code sebagai berikut, apa yang terjadi (misalkan di class Hewan ada method makan() dan class Bebek override method makan tersebut):

Hewan bebekKloset = new Bebek();

bebekKloset.makan();

Method makan() mana yang dipanggil? makan() pada Hewan atau makan() pada Bebek?

Jawabannya adalah makan pada Bebek(). Mengapa? Karena Java melakukan “late binding”, artinya pengasosiasian method dilakukan pada runtime. Jadi pada contoh di atas, tipe bebekKloset adalah Hewan, tapi pada saat aplikasi dijalankan, sebenarnya bebekKloset adalah Bebek dan bukan Hewan.

Advertisement

2 thoughts on “Konsep OOP : Polymorphism”

  1. ga ngerti bos….
    yang bagian pertama2
    jadi polymophism itu kaya gimana belum kebayang.
    gimana kalo upcasting dan downcasting

    Like

  2. bukannya di java polymorphism itu pake interface??

    public interface Hewan {
    public void makan(String makanan);
    public void tidur();
    }

    public class Ayam implements Hewan {
    public void makan(String makanan) {
    if (makanan.equal(“daging”) {
    System.out.println(“gak napsu coy”);
    }
    }

    public void tidur() {
    System.out.println(“Isi tenaga buat berkokok besok”);
    }
    }

    cmiiw

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s