Overridung polymorphism
-
Upload
bambang-siswoyo -
Category
Documents
-
view
956 -
download
4
Transcript of Overridung polymorphism
![Page 1: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/1.jpg)
Pemrograman Berbasis Objek
Overriding – Overloading - Polymorphism
![Page 2: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/2.jpg)
Topik Overriding Overloading Constructor overloading Polymorphism Virtual Method Invocation Polymorphic arguments Operator instanceof Casting & Convertion Objects
![Page 3: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/3.jpg)
Overriding
• Subclass yang berusaha memodifikasi tingkah laku yang diwarisi dari superclass.
• Tujuan: subclass memiliki tingkah laku yang lebih spesifik.
• Dilakukan dengan cara mendeklarasikan kembali method milik parent class di subclass.
![Page 4: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/4.jpg)
Overriding
Deklarasi method pada subclass harus sama dengan yang terdapat di super class. Kesamaan pada: Nama Return type Daftar parameter (jumlah, tipe, dan urutan)
Method pada parent class disebut overriden method Method pada subclass disebut overriding method.
![Page 5: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/5.jpg)
Contoh Overriding
![Page 6: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/6.jpg)
Contoh Overriding
public class Animal {public void SetVoice() {
System.out.println(“Blesepblesep”);}
}
public class Dog extends Animal {public void SetVoice() {
System.out.println(“Hug hug”);}
}
![Page 7: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/7.jpg)
Aturan Overriding Mode akses overriding method harus sama atau
lebih luas dari pada overriden method. Subclass hanya boleh meng-override method
superclass satu kali saja, tidak boleh ada lebih dari satu method pada kelas yang sama yang sama persis.
Overriding method tidak boleh throw checked exceptions yang tidak dideklarasikan oleh overridden method.
![Page 8: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/8.jpg)
Overloading
Menuliskan kembali method dengan nama yang sama pada suatu class.
Tujuan : memudahkan penggunaan/pemanggilan method dengan fungsionalitas yang mirip.
![Page 9: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/9.jpg)
Aturan Pendeklarasian Method Overloading
Nama method harus sama Daftar parameter harus berbeda Return type boleh sama, juga boleh
berbeda
![Page 10: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/10.jpg)
Daftar Parameter Pada Overloading
Perbedaan daftar parameter bukan hanya terjadi pada perbedaan banyaknya parameter, tetapi juga urutan dari parameter tersebut.
Misalnya saja dua buah parameter berikut ini : function_member(int x, String n) function_member(String n, int x)
Dua parameter tersebut juga dianggap berbeda daftar parameternya.
![Page 11: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/11.jpg)
Daftar Parameter Pada Overloading
Daftar parameter tidak terkait dengan penamaan variabel yang ada dalam parameter.
Misalnya saja 2 daftar parameter berikut : function_member(int x) function_member(int y)
Dua daftar parameter diatas dianggap sama karena yang berbeda hanya penamaan variabel parameternya saja.
![Page 12: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/12.jpg)
Contoh Overloading
![Page 13: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/13.jpg)
Contoh
public class Bentuk {…public void Gambar(int t1) {
…}public void Gambar(int t1, int t2) {
…}public void Gambar(int t1, int t2, int t3) {
…}public void Gambar(int t1, int t2, int t3, int t4) {
…}
}
![Page 14: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/14.jpg)
![Page 15: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/15.jpg)
Overloading juga bisa terjadi antara parent class dengan subclass-nya jika memenuhi ketiga syarat overload.
Misalnya saja dari class Bentuk pada contoh sebelumnya kita turunkan sebuah class baru yang bernama WarnaiBentuk.
![Page 16: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/16.jpg)
public class WarnaiBentuk extends Bentuk {
public void Gambar(String warna, int t1, int t2, int3) {
…
}
public void Gambar(String warna, int t1, int t2, int3, int t4) {
…
}
…
}
![Page 17: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/17.jpg)
Constructor Overloading
![Page 18: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/18.jpg)
Constructor Overloading
![Page 19: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/19.jpg)
Memanggil parent class construktor
![Page 20: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/20.jpg)
Polymorphism
Polymorphism adalah kemampuan untuk mempunyai beberapa bentuk yang berbeda.
![Page 21: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/21.jpg)
Misal: Manager adalah Employee
public class Employee {public String nama;public String gaji;
void infoNama(){System.out.println(“Nama” + nama);
}}
public class Manajer extends Employee {public String departemen;
}
![Page 22: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/22.jpg)
Contoh
Employee emp = new Manager();
Reference variabel dari emp adalah Employee.
Bentuk emp adalah Manager.
![Page 23: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/23.jpg)
Polymorphism: ingat !!
Satu obyek hanya boleh mempunyai satu bentuk saja.
Yaitu bentuk yang diberikan ketika obyek dibuat.
Reference variabel bisa menunjuk ke bentuk yang berbeda.
![Page 24: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/24.jpg)
Virtual Method Invocation Virtual method invocation merupakan suatu hal yang sangat
penting dalam konsep polimorfisme. Syarat terjadinya VMI adalah sebelumnya sudah terjadi
polymorphism. Pada saat obyek yang sudah dibuat tersebut memanggil
overridden method pada parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap overriding method pada subclass, dimana yang seharusnya dipanggil adalah overridden.
![Page 25: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/25.jpg)
Contoh Virtual Method Invocationclass Employee{}
class Manager extends Employee{}
…
Employee emp = new Manager();
emp.getDetails();
![Page 26: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/26.jpg)
Virtual Method InvocationYang terjadi pada contoh: Obyek e mempunyai behavior yang sesuai dengan runtime type
bukan compile type. Ketika compile time e adalah Employee. Ketika runtime e adalah Manager. Jadi :
emp hanya bisa mengakses variabel milik Employee. emp hanya bisa mengakses method milik Manager
![Page 27: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/27.jpg)
Virtual Method Invocation Bagaimana dengan konstruktor yang dijalankan? Pada pembentukan
Employee e = new Manager(); Pertama kali akan menjalankan konstruktor Manager, ketika
ketemu super() maka akan menjalankan konstruktor Employee (superclass), setelah semua statement dieksekusi baru kemudian menjalankan konstruktor Manager (subclass).
![Page 28: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/28.jpg)
![Page 29: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/29.jpg)
Virtual Method Invocation pada C++
Pada method yang akan dilakukan VMI harus ditandai dengan kata virtual.
![Page 30: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/30.jpg)
Polymorphic Arguments
Polymorphic arguments adalah tipe data suatu argumen pada suatu method yang bisa menerima suatu nilai yang bertipe subclass-nya.
![Page 31: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/31.jpg)
Polymorphic Arguments
![Page 32: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/32.jpg)
class Pegawai {…
}
class Manajer extends Pegawai {…
}
public class Tes {public static void Proses(Pegawai peg) {
…}
public static void main(String args[]) {Manajer man = new Manajer();Proses(man);
}}
![Page 33: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/33.jpg)
Operator instanceof
Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu polymorphic arguments
![Page 34: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/34.jpg)
Operator instanceof
![Page 35: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/35.jpg)
…class Kurir extends Pegawai {
…}
public class Tes {public static void Proses(Pegawai peg) {
if (peg instanceof Manajer) { … lakukan tugas-tugas manajer…
} else if (peg instanceof Kurir) { … lakukan tugas-tugas kurir…
} else { … lakukan tugas-tugas lainnya…
}}
public static void main(String args[]) {Manajer man = new Manajer();Kurir kur = new Kurir();Proses(man);Proses(kur);
}}
![Page 36: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/36.jpg)
Casting object
Seringkali pemakaian instanceof diikuti dengan casting object dari tipe parameter ke tipe asal.
![Page 37: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/37.jpg)
Tanpa adanya casting obyek, maka nilai yang akan kita pakai setelah proses instanceof masih bertipe parent class-nya, sehingga jika ia perlu dipakai maka ia harus di casting dulu ke tipe subclass-nya.
![Page 38: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/38.jpg)
…
if (peg instanceof Manajer) {
Manajer man = (Manajer) peg;
…lakukan tugas-tugas manajer…
}
…
![Page 39: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/39.jpg)
Kenapa diperlukan polymorphic arguments? Mengefisienkan pembuatan program Misal Employee mempunyai banyak subclass. Maka kita harus mendefinisikan semua method yang menangani
behavior dari masing-masing subclass. Dengan adanya polymorphic arguments kita cukup
mendefinisikan satu method saja yang bisa digunakan untuk menangani behavior semua subclass.
![Page 40: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/40.jpg)
Tanpa polymorphic arguments…public class Tes {
public static void ProsesManajer() {…lakukan tugas-tugas manajer…
}
public static void ProsesKurir() {…lakukan tugas-tugas kurir…
}…
}
![Page 41: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/41.jpg)
Object Reference Conversion
Pada object reference bisa terjadi: Assignment conversion Method-call conversion Casting
Pada object references tidak terdapat arithmetic promotion karena references tidak dapat dijadikan operan arithmetic.
Reference conversion terjadi pada saat kompile
![Page 42: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/42.jpg)
Object Reference Assignment Conversion
Terjadi ketika kita memberikan nilai object reference kepada variabel yang tipenya berbeda.
Three general kinds of object reference type: A class type, such as Button or Vector An interface type, such as Runnable or LayoutManager An array type, such as int[][] or TextArea[]
Contoh:
1. Oldtype x = new Oldtype();2. Newtype y = x; // reference assignment conversion
![Page 43: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/43.jpg)
Converting OldType to NewType
Oldtype x = new Oldtype();
Newtype y = x; // reference assignment conversion
![Page 44: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/44.jpg)
The rules for object reference conversion Interface hanya dapat di konversi ke interface atau Object.
Jika NewType adalah interface, maka NewType ini harus merupakan superinterface dari OldType.
Class hanya bisa dikonversi ke class atau interface. Jika dikonversi ke class, NewType harus merupakan superclass dari OldType.Jika dikonversi ke interface, OldType (class) harus mengimplementasikan (NewType) interface
Array hanya dapat dikonversi ke Object, interface Cloneable atau Serializable, atau array.Hanya array of object references yang dapat dikonversi ke array, dan old element type harus convertible terhadap new element type.
![Page 45: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/45.jpg)
Contoh 1 :
Tangelo tange = new Tangelo();
Citrus cit = tange; // No problem
Contoh 2:
Citrus cit = new Citrus();
Tangelo tange = cit; // compile error
Contoh 3:
Grapefruit g = new Grapefruit();
Squeezable squee = g;// No problem
Grapefruit g2 = squee; // Error
![Page 46: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/46.jpg)
Contoh 4 :
Fruit fruits[];
Lemon lemons[];
Citrus citruses[] = new Citrus[10];
For (int I=0; I<10; I++) {
citruses[I] = new Citrus();
}
fruits = citruses; // No problem
lemons = citruses; // Error
![Page 47: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/47.jpg)
Object Method-Call Conversion
• Aturan object reference method-call conversion sama dengan aturan pada object reference assignment conversion.
• Converting to superclass permitted.
• Converting to subclass not permitted.
![Page 48: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/48.jpg)
Object Method-Call Conversion
Contoh:
Vector myVec = new Vector();
Tangelo tange = new Tangelo();
myVect.add(tange); // No problem
Note: method add pada vector meminta satu parameter add(Object ob)
![Page 49: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/49.jpg)
Object Reference Casting Is like primitive casting Berbagai macam konversi yang diijinkan pada object reference
assignment dan method call, diijinkan dilakukan eksplisit casting.
Contoh:
Lemon lem = new Lemon();
Citrus cit = lem; // No problem
Sama dengan:
Lemon lem = new Lemon();
Citrus cit = (Citrus) lem; // No problem
• The cast is legal but not needed.
• The power of casting appears when you explicitly cast to a type that is not allowed by the rules of implicit conversion.
![Page 50: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/50.jpg)
Object Reference Casting1. Grapefruit g, g1;2. Citrus c;3. Tangelo t;4. g = new Grapefruit();
// Class is Grapefruit5. c = g;
// Legal assignment conversion,// no cast needed
6. g1 = (Grapefruit)c; // Legal cast
7. t = (Tangelo)c; // Illegal cast// (throws an exception)
Kompile ok, kompiler tidak bisa mengetahui object reference yang di pegang oleh c.
Runtime error class c adalah Grapefruit
![Page 51: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/51.jpg)
Object Reference CastingExample: Object is cast to an interface type.
1. Grapefruit g, g1;2. Squeezable s;3. g = new Grapefruit();4. s = g; // Convert Grapefruit to Squeezable (OK)5. g1 = s; // Convert Squeezable to Grapefruit
// (Compile error)
Implicitly converting an interface to a class is never allowed Penyelesaian : gunakan eksplisit casting
g1 = (Grapefruit) s; Pada saat runtime terjadi pengecekan.
![Page 52: Overridung polymorphism](https://reader036.fdokumen.com/reader036/viewer/2022062312/5563a59cd8b42a2b6a8b52a0/html5/thumbnails/52.jpg)
Object Reference Casting
Example: array.
1. Grapefruit g[];
2. Squeezable s[];
3. Citrus c[];
4. g = new Grapefruit[500];
5. s = g; // Convert Grapefruit array to Squeezable array (OK)
6. c = (Citrus[])s; // Convert Squeezable array to Citrus array (OK)