Polimorfisme : kemampuan untuk menghandle banyak bentuk. Polimorfisme : kemampuan untuk memproses objek-objek yang berbeda jenis dan class melalui satu antarmuka yang seragam. Polimorfisme adalah suatu kejadian ketika objek dapat mengungkap banyak hal melalui suatu cara yang sama, suatu object dapat memiliki berbagai bentuk, sebagai object dari class sendiri atau object dari superclassnya. Polimorfisme dalam OOP adalah sebuah prinsip di mana class dapat memiliki banyak “bentuk” method yang berbeda-beda meskipun namanya sama. “Bentuk” di sini dapat kita artikan : isinya berbeda, parameternya berbeda, dan tipe datanya berbeda. 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.
Static polimorfisme atau trivial merupakan function overloading (penggunaan kembali nama fungi yang sama tapi dengan argumen yang berbeda) / ( Penggunaan satu nama untuk beberapa method yang berbeda (beda parameter)). Syarat Overload yaitu nama return type, argument, dan parameter harus sama. Jika tidak sama maka bukan dianggap sebagai overload. Pada overload method, tidak diharuskan menggunakan inheritance, karena dapat digunakan secara public asalkan parameter dan argumennya sesuai. 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 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 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 instance of
Java menyediakan operator binary instance of yang akan
mengembalikan nilai benar jika objek memang instance/anggota dari class tertentu. An Object instance of a Class 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 Method getArea() pada Shape
Lihat contoh program Apa yang terjadi jika:
yang disediakan. 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()); } } SEKIAN DAN TERIMAKASIH