MODUL 8 PBO 1 POLIMORFISME POLYMORPHISM Polimorfisme Perhatikan
MODUL 8 PBO 1 POLIMORFISME (POLYMORPHISM)
Polimorfisme • Perhatikan diagram kelas pewarisan di slide sebelumnya. Kita bisa membuat sebuah obyek Manager dengan tipe class Employee setiap operasi (method) yang berlaku di dalam class Employee juga berlaku di class Manager. • Suatu obyek hanya mungkin berada dalam satu bentuk tertentu. Tetapi suatu variabel referen dapat merujuk ke obyek-obyek dengan berbagai bentuk. • Java memungkinkan kita untuk merujuk ke suatu obyek dengan variabel yang bertipe class induknya. Contoh: Employee e = new Manager();
Polimorfisme • Dengan variabel e, kita hanya dapat mengakses bagian-bagian dari obyek yang merupakan bagian dari Employee, sedangkan bagian-bagian milik Manager tersembunyi. • Contoh SALAH: Employee e = new Manager(); // bisa dilakukan // Perintah berikut tidak bisa dilakukan e. department = "Sales"; // karena meskipun Manager punya atribut departemen // namun variabel e dideklarasikan dengan tipe Employee
Pemanggilan Metode Virtual (Virtual Method Invocation) • Misal didefinisikan bahwa: Employee e = new Employee(); Manager m = new Manager(); Maka perintah e. get. Details() dan m. get. Details() akan menghasilkan perilaku yang berbeda. – Obyek Employee mengeksekusi method get. Details() milik class Employee - Obyek Manager mengeksekusi method get. Details() milik class Manager
Pemanggilan Metode Virtual (Virtual Method Invocation) • Misal dituliskan bahwa: Employee e = new Manager(); e. get. Details(); Maka yang dieksekusi adalah method get. Details() milik class Employee. – Jika Employee tidak punya method get. Details() error - Jika Manager meng-override method get. Details yang dieksekusi adalah method get. Details() milik Manager - Jika Manager tidak punya method get. Details yang dieksekusi adalah method get. Details() milik Employee
Heterogeneous Collection • Array : kumpulan obyek dengan tipe class yang sama (homogeneous collection) • Heterogeneous collection : kumpulan obyek dengan tipe class yang berbeda
Heterogeneous Collection class tes 84 { public static void main (String[] args) { int i; Employee [] staff = new Employee[100]; staff[0] = new Manager("Adhi", 40, 5000000, "Sales"); staff[1] = new Employee("Titi", 30, 1000000); staff[2] = new Manager("Dewi", 30, 2000000, "IT"); for (i = 0; i<3; i++) staff[i]. get. Details(); } }
Argumen Polimorfis • Kita dapat membuat method yang dapat menerima obyek sebagai parameter. Contoh: public class Pajak { Pajak(){}; public double hitung. Pajak(Employee e) { double p = 0. 01 * e. gaji; return p; } }
Argumen Polimorfis • Selanjutnya dalam main dapat dieksekusi perintah berikut: class tes 85 { public static void main (String[] args) { Pajak pjk = new Pajak(); Manager m = new Manager("Adhi", 40, 5000000); double t = pjk. hitung. Pajak(m); m. get. Details(); System. out. println("Pajak ="+t); } }
Operator instaceof • Kita bisa mengetahui jenis/tipe dari suatu obyek yang kita miliki dengan menggunakan operator instanceof. Contoh: public void tampil. Jenis(Employee e) { if (e instanceof Manager) { System. out. println("Jenis : Manager"); } else if (e instanceof Employee) { System. out. println("Jenis : Employee"); } }
Casting object • Kita bisa mengcasting suatu obyek yang sebelumnya didefinisikan dengan tipe class induknya, menjadi tipe aktualnya. Dengan demikian kita bisa memiliki akses terhadap method maupun atribut yang dimiliki oleh class anak tsb. Contoh (class Pajak 3. java/tes 86. java): public void tampil. Jenis(Employee e) { if (e instanceof Manager) { System. out. println("Jenis : Manager"); Manager m = (Manager) e; m. departemen="Sales"; m. get. Details(); } }
Casting object • Dalam main class dieksekusi perintah sbb: class tes 86 { public static void main (String[] args) { Pajak 3 pjk = new Pajak 3(); Employee e = new Manager("Adhi", 40, 5000000); double t = pjk. hitung. Pajak(e); e. get. Details(); System. out. println("Pajak ="+t); pjk. tampil. Jenis(e); } }
- Slides: 13