Bahasa Pemrograman 2 Polimorfisme dan Binding Polimorfisme dan Binding
[email protected]
Polymorphism • Polymorphism = Poly + Morphos P l hi P l M h • Poly = banyak, Morphos = bentuk • Kemampuan obyek‐obyek yang berbeda untuk memberi respons terhadap permintaan yang sama, sesuaii dengan d cara masing‐masing i i obyek b k • Polymorfisme dapat diterapkan secara: – Overriding Method O idi M h d – Overloading Method
Polymorphism
Review: Overriding Review: Overriding • Subclass yang berusaha memodifikasi tingkah g dari superclass. p laku yyang diwarisi • Tujuan: subclass memiliki tingkah laku yang lebih spesifik. • Dilakukan dengan cara mendeklarasikan kembali method milik parent class di subclass.
Review: Overriding Review: Overriding • D Deklarasi kl i method pada th d d subclass harus b l h sama dengan yang terdapat di super class. Kesamaan pada: – Nama – Return type R t t – Daftar parameter (jumlah, tipe, dan urutan)
• M Method pada h d d parent class disebut l di b overriden id method • Method pada h d d subclass disebut b l d b overriding idi method.
Review: Overriding Review: Overriding • Class Anjing melakukan overriding terhadap () y g dari class method bersuara() yang diturunkan Binatang • Dengan overriding, suatu method yang didapatkan oleh subclass bisa melakukan hal yang berbeda dengan method asli yang berbeda method asli pada superclassnya
Review: Overriding Review: Overriding • M Mode akses d k overriding method harus idi th d h sama atau lebih luas dari pada overriden method. • Subclass hanya boleh meng‐override method superclass l satu kali saja, tidak k li j d k boleh b l h ada d lebih l bh dari satu method pada kelas yang sama yang sama persis. persis – Jika lebih dari satu berarti ada 2 method yang sama persis dalam satu kelas sama persis dalam satu kelas
Review: Overriding Review: Overriding • Contoh: class Binatang { public String bersuara() { return "Suara binatang"; g } } class Anjing extends Binatang { public String bersuara() { return "Guk guk"; } }
Review: Overriding Review: Overriding • Dalam metode overriding, kita dapat l d idi ki d memanggil metode overriden. • Menggunakan keyword: super.namaMethod() p () • super super menandakan konstruktor sekaligus menandakan konstruktor sekaligus superclass – Konstruktor disesuaikan dgn parameternya – Superclass bisa memanggil methodnya
Review: Overriding Review: Overriding • Contoh: class Mahasiswa { public void perkenalan() { System.out.print("Objek mahasiswa"); } } class MhsSI extends Mahasiswa { public void perkenalan() { super.perkenalan(); System.out.println(“SI"); } }
Review: Overriding Review: Overriding • Contoh: class CobaMhs { public static void main(String[] args) { Mahasiswa baru = new MhsSI(); baru.perkenalan(); p (); } }
Review: Overloading Method Review: Overloading • Menuliskan kembali method dengan nama yyang sama g pada suatu class. p • TTujuan j : memudahkan d hk penggunaan/pemanggilan method dengan fungsionalitas yang mirip.
Overloading Aturan overloading: •
Nama method harus sama
•
Daftar parameter harus parameter harus berbeda
•
Return type boleh sama, juga boleh berbeda
Overloading Method • Contoh: public void println (char c); public void println (String s); public void println (int i); public void println public void println (String s, double d);
Contoh
Polimorfisme • Berhubungan dengan abstract class • Kelas abstract Kelas abstract “memaksa” memaksa kelas anak kelas anak mengoverride method yg abstract dikelas induk sehingga kelas anak dapat “bertingkah induk sehingga kelas anak dapat bertingkah laku” seperti yang diinginkannya! – Berbeda dengan induknya – Namun masih “sejenis dengan induknya” j g y
Polimorfisme • Sifat “sejenis” dengan induknya itulah yang p g dapat digunakan untuk membuat kelas “umum” yang dapat menggunakan kelas yang bertipe induk namun bertingkah laku sesuai bertipe induk namun bertingkah laku sesuai dengan kelas anaknya • Contoh h
public abstract bli b t t class Bentuk l B t k{ private String jenis; public abstract void hitungLuas(); public abstract void hitungLuas(); public void setJenis(String j){ this jenis = j; this.jenis = j; } public String getJenis(){ public String getJenis(){ return this.jenis; } }
class Segitiga l Segitiga extends Bentuk{ t d Bent k{ private int alas; private int tinggi; public void hitungLuas(){ System out println ("Luas System.out.println ( Luas : : "+(0 +(0.5*alas*tinggi)); 5*alas*tinggi)); } public Segitiga(String j,int a,int t){ super.setJenis(j); this.alas = a; this tinggi = t; this.tinggi = t; } }
class Persegi l P i extends Bentuk{ t d B t k{ private int sisi; public void hitungLuas(){ public void hitungLuas(){ System.out.println ("Luas : "+(sisi*sisi)); } public Persegi(String j,int s){ super setJenis(j); super.setJenis(j); this.sisi = s; } }
class Pemakai{ class Pemakai{ public void Laporkan(Bentuk b){ System.out.println ("Jenis : "+b.getJenis()); b hitungLuas(); b.hitungLuas(); } public static void main(String args[]) { public static void main(String args[]) { Pemakai p = new Pemakai(); Segitiga s = new Segitiga("segitiga",5,4); Persegi pp = new Persegi("bujur sangkar",9); g pp g( j g , ); p.Laporkan(s); p.Laporkan(pp); } }
Proses binding obyek oleh compiler Proses binding obyek oleh compiler • Binding = pengikatan obyek oleh compiler • Static binding Static binding • Dyanamic binding
Static Binding Static Binding • Binding dilakukan saat compile‐time • Overloading berarti ada beberapa method Overloading berarti ada beberapa method dengan nama yang sama. – Method yang dijalankan tergantung dari M th d dij l k t t d i parameter yang diberikan
• Pemilihan method yang dijalankan ditentukan p ( g) saat compile time (static binding)
Static Binding Static Binding Contoh: C t h public void println (char c); public void println (String s); public void println (String s); public void println (int i); public void println p p ((String s, double d); g , ); println(“PBO”); println(2000); println(“a”); println(‘b’); i tl (‘b’) println(“Data”, 2.0);
Dynamic Binding Dynamic Binding • Bi Binding dilakukan di dil k k saatt run‐time (dynamic) ti (d i ) • Penentuan method mana yang dijalankan dilakukan saat run‐time Contoh: void kill (Mortal m) { m.killed(); } Misalnya orang dan tanaman masuk dalam class Mortal, maka Misalnya orang dan tanaman masuk dalam class Mortal maka method killed() yang dipanggil tergantung dari siapa pemanggilnya.
Contoh
Dynamic Binding Dynamic Binding • Dynamic binding dapat dilakukan dengan 2 cara: – Overriding Inheritance Method – Overriding Interface Method Overriding Interface Method
Overriding Inheritance Method Overriding Inheritance Method
“Guk Guk”
Meong…
“Mbeeekkkk”
Polymorphism class Binatang l Bi t { private String name; public Binatang(String n) { name = n; } public String getName() { public String getName() { return name; } public void bersuara() { System out println(“Binatang System.out.println( Binatang bersuara bersuara”); ); } }
Polymorphism class Anjing l A ji extends Binatang t d Bi t { Anjing(String n) { super(n); ( ) } public void bersuara() { System.out.println(“Guk guk guk”); } }
Polymorphism class Kucing l K i extends Binatang t d Bi t { Kucing(String n) { super(n); ( ) } public void bersuara() { System.out.println(“meong meong”); } }
Penentuan Polimorfisme Penentuan Polimorfisme • Penentuan “siapa” obyek sesungguhnya yang p p diacu oleh kompiler dapat diakses menggunakan casting sesuai dengan tipe data class anak yang sebenarnya! class anak yang sebenarnya!
Contoh Casting Polymorfisme Casting Polymorfisme class A extends Object{ class A extends Object{ public void m(){ System.out.println("m in class A"); } } class B extends A{ public void m(){ System.out.println("m in class B"); } } public class CobaPoly{ public static void main(String[] args){ Object var = new B(); ((B) var).m(); var) m(); } }
Aturan interface Aturan interface • Suatu interface dapat mengekstends interface lain • Tujuannya: memperluas kemampuan interface • Interface hanya bisa extends interface saja I f h bi d i f j – Tidak bisa extends class & abstract class
Overriding Interface Method Overriding Interface Method Contoh: h interface I1{ { public void p(); } interface I2 extends I1{ public void q(); public void q(); }
Overriding Interface Method Overriding Interface Method class A extends l d Object{ bj { p public String toString(){ g g(){ return "toString in A"; } public String x(){ return "x in A"; } }
Overriding Interface Method Overriding Interface Method class B extends A implements I2{ public void p(){ p p(){ System.out.println ("p() in B"); } y p ( p() ); } public void q(){ System.out.println ("q() in B"); } } class C extends Object implements I2{ public void p(){ System.out.println ("p() in C"); } public void q(){ System.out.println ( public void q(){ System out println ("p() p() in C in C"); ); }} }
public class demoInterface { public class demoInterface public static void main(String[] args) { A a = new A(); System.out.println (a.x()); C c = new C(); c.p(); c.q(); B b = new B(); b.p(); b.q(); } }
NEXT • Package & Class‐class penting