Polymorphism Viska Mutiawani, M.Sc Konsep Penting Makna polymorphism Static binding Dynamic binding Makna Polymorphism Polymorphism : polimorfisme Polymorphism = poly (banyak) + morphos (bentuk) : banyak bentuk Polymorphism : kemampuan untuk menghandle banyak bentuk. Polymorphism : kemampuan untuk memproses objek-objek yang berbeda jenis dan class melalui satu antarmuka yang seragam. Tipe Polimorfisme Java memiliki 2 tipe polimorfisme: Polimorfisme kompilasi (static binding) Polimorfisme runtime (dynamic binding) Polimorfisme statis, contoh pada method overloading. Polimorfisme dinamis, contoh pada method overriding. Contoh sederhana polimorfisme Semua objek yang memenuhi lebih dari satu relasi is-a maka objek tersebut polymorphic. Semua objek di Java: polymorphic Substitusi Subkelas mewarisi semua atribut dan perilaku superkelas. Maknanya subkelas dapat melakukan semua hal yang dilakukan oleh superkelas. Akibatnya, kita dapat mensubstitusi objek superkelas dengan objek subkelasnya. Inilah yang disebut substitusi. Dengan substitusi: Circle c1 = new Cylinder(5.0); Polimorfisme Statis Contoh pada method overloading. Sewaktu kompilasi, Java tahu method mana yang akan dipanggil Contoh Polimorfisme Statis Polimorfisme Dinamis Anggaplah subclass meng-override method tertentu pada superclass. Andai kita cipta objek dari subclass dan memasukkannya (via =) dalam superclass. Walau objek subclass telah dimasukkan pada superclass, sewaktu objek tersebut memanggil method yang dioverride, ia tetap memanggil method yang versi subclassnya, bukan versi superclass. Contoh Polimorfisme Dinamis Class Vehicle memiliki method move(). Class MotorBike meng-override method move(). Java akan menunggu saat runtime untuk menentukan method move() yang mana akan dipanggil. Upcasting Upcasting : substitusi objek subclass pada superclassnya. Upcasting selalu aman, karena compiler Java pasti akan mengecek upcasting yang sah dan akan mengeluarkan error “incompatible types” jika tidak sah. Downcasting Downcasting : substitusi objek subclass yang direference ke superclass, dikembalikan ke objek subclassnya. Memerlukan casting operator. Downcasting Downcasting tidak selalu aman. Downcasting dapat melempar ClassCastException jika objek yang didowncast bukan bagian dari subclass yang benar. A subclass object can be substituted for its superclass, but the reverse is not true. Operator instanceof Java menyediakan operator binary instanceof yang akan mengembalikan nilai benar jika objek memang instance/anggota dari class tertentu. anObject instanceof aClass Objek dari subclass juga merupakan objek dari superclass. Kegunaan Polimorfisme Polimorfisme sangat penting pada PBO, yang berguna untuk memisahkan antara antarmuka dan implementasi. Sehingga programmer dapat lebih fokus sewaktu mendesain sistem yang kompleks. Protected access Private access in the superclass may be too restrictive for a subclass. The closer inheritance relationship is supported by protected access. Protected access is more restricted than public access. We still recommend keeping fields private. Define protected accessors and mutators. Access levels Contoh Polimorfisme Lihat contoh program yang disediakan. Method getArea() pada Shape Apa yang terjadi jika: public class TestShape { public static void main(String[] args) { // Constructing a Shape instance poses problem! Shape s3 = new Shape("green"); System.out.println(s3); System.out.println("Area is " + s3.getArea()); } }