OOP Java 06 Polymorphism Materi yang akan dibahas
OOP Java 06 Polymorphism
Materi yang akan dibahas : • Overriding methods • Polymorphism – Heterogeneous Array – Polymorphic arguments – Operator instance of – Type Casting objek
Overriding Methods (1) • Overriding : memodifikasi kelakuan (behavior) dari kelas induk (parent class). • Jika method pada kelas anak memiliki nama, return type & argument yg sama dengan method pd kelas induknya maka method tsb meng-override method induknya.
Overriding Methods (2) • Contoh Penggunaan //Overriding methods : Employee. java public class Employee { protected String name = “Rudy”; protected double salary = 1000000; public String get. Details() { return "Name " + name + "n" + "Salary : " + salary; } //Overriding methods : Test. Override. java public class Test. Override { public static void main(String[] args) { Employee p 1 = new Employee(); Manager p 2 = new Manager(); System. out. println("p 1 : " + p 1. get. Details()); System. out. println("p 2 : " + p 2. get. Details()); } } //Overriding methods : Manager. java } public class Manager extends Employee { protected String department = “IT”; private String get. Details() { //illegal return "Name " + name + “n“ + "Salary : " + salary + “n” + "Manager of : " + department; } } • • get. Details() di manager meng-override get. Details() di Employee Method peng-override tidak bisa lebih terbatas aksesnya daripada method yang di override
Overriding Methods (3) • Memanggil method yg di override //Overriding methods : Employee. java public class Employee { protected String name; protected double salary; public String get. Details() { return "Name " + name + "n" + "Salary : " + salary; } } //Overriding methods : Manager. java public class Manager extends Employee { protected String department; public String get. Details() { return super. get. Details() + “n” + "Manager of : " + department; } } • super. get. Details() memanggil method get. Details() di Employee • super digunakan utk mengakses member dari kelas induk
Polymorphism (1) • Sebuah objek hanya bisa mempunyai satu bentuk, yaitu yg diberikan waktu objek dibuat. • Tetapi variabel bersifat polymorphic karena dapat menunjuk ke objek 2 dengan bentuk yg berbeda 2. • Kita dapat menunjuk (refer) ke sebuah objek dengan menggunakan variabel yg bertipe kelas induknya : Employee e = new Manager(); //legal • Tetapi hanya dapat mengakses member dari objek yang juga merupakan member dari Employee, member yg hanya ada di Manager menjadi tersembunyi e. department = “accounting”; //illegal
Polymorphism (2) • Aspek lain dari polymorphism adalah virtual method invocation. • Apa yg terjadi ketika kita melakukan : Employee e = new Manager(); e. get. Details(); • Statement e. get. Details(); pada saat kompilasi dicek terhadap kelas Employee, tetapi pada saat dijalankan kita akan mendapatkan behavior dari objek yg di refer, yaitu dari kelas Manager.
Polymorphism (3) //Polymorphism : Test. Polymorph. java public class Test. Polymorph { public static void main(String[ ] args) { Employee p 1 = new Employee(); Employee p 2 = new Manager(); Manager p 3 = new Employee(); System. out. println("p 1 : " + p 1. get. Details()); System. out. println("p 2 : " + p 2. get. Details()); System. out. println("p 3 : " + p 3. get. Details()); } }
Heterogeneous Array (1) • Objek-objek dari kelas yg sama dapat disimpan didalam array. Ini disebut homogeneous array, contohnya sbb : Mahasiswa[] mhs = new Mahasiswa[3]; mhs[0] = new Mahasiswa(“ 0572123”, “Anton”); mhs[1] = new Mahasiswa(“ 0572070”, “Renny”); mhs[2] = new Mahasiswa(“ 0572237”, “Benny”);
Heterogeneous Array (2) • Semua kelas di java adalah turunan dari kelas Object. • Hal ini menyebabkan dapat dibuatnya array dari objek 2 yg berasal dari kelas yg berbeda 2, sehingga disebut heterogenous array. Employee[] staff = new Employee[3]; staff[0] = new Employee(); staff[1] = new Manager(); staff[2] = new Engineer();
Polymorphic Arguments (1) • Dengan menggunakan Polymorphic Arguments, kita dapat membuat method yang dapat menerima generic object (parent objek) dan tetap dapat bekerja dengan baik menggunakan objek 2 dari kelas turunannya :
Polymorphic Arguments (2) //Polymorphic Arguments : Hitung. java public class Hitung { public double hitung. Salary(Employee e) { return e. salary; } } //Polymorphic Arguments : Test. Poly. Arg. java public class Test. Poly. Arg { public static void main(String[ ] args) { Employee p 1 = new Employee(); Manager p 2 = new Manager(); Hitung p 3 = new Hitung(); System. out. println("Salary p 1 : " + p 3. hitung. Salary(p 1)); System. out. println("Salary p 2 : " + p 3. hitung. Salary(p 2)); } }
Operator instanceof (1) • Untuk mengetahui objek yang sebenarnya, dapat digunakan operator instanceof : //Polymorphic Arguments : Hitung 2. java public class Hitung 2 { public double hitung. Salary(Employee e) { if (e instanceof Manager) { return e. salary*2; } else { return e. salary; } } }
Typecasting (1) • Casting objek dapat dilakukan dengan cara : Emloyee e = new Manager(); Manager m; String s; if (e instanceof Manager) { s = ((Manager) e). department; //atau m = (Manager) e; s = m. department; }
Typecasting (2) • Untuk mengetahui objek yang sebenarnya, dapat digunakan operator instanceof : //Casting Object : Hitung 3. java public class Hitung 3 { public double hitung. Salary(Employee e) { if (e instanceof Manager) { System. out. println(e. department); //error System. out. println(((Manager)e). department); return e. salary*2; } else { return e. salary; } } } //ok
- Slides: 15