PEMROGRAMAN LANJUT Sistem Informasi PTIIK UB Semester Genap 2014/2015
KONSEP OOP: POLYMORPHISM Dr. Eng. Herman Tolle Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya
Polymorphism • Polymorphism | Polimorfisme • Morph berubah bentuk
• Kemampuan dari sebuah objek untuk berubah bentuk menyesuaikan dengan referensi objek yang ditentukan oleh program yang kita buat • Static Polymorphism dan Dinamic Polymorphism
Static Polymorphism • In Java, static polymorphism is achieved through method overloading. Method overloading means there are several methods present in a class having the same name but different types/order/number of parameters. • At compile time, Java knows which method to invoke by checking the method signatures. • This is called compile time polymorphism or static binding.
3
Demo Overload class DemoOverload{ public int add(int x, return x+y; } public int add(int x, return x+y+z; } public int add(double return (int)x+y; } public int add(int x, return x+(int)y; } }
int y) {
//method 1
int y, int z){
//method 2
x, int y){ //method 3
double y){ //method 4
class Test { public static void main(String[] args){ DemoOverload demo=new DemoOverload(); System.out.println(demo.add(2,3)); //method 1 System.out.println(demo.add(2,3,4)); //method System.out.println(demo.add(2,3.4)); //method System.out.println(demo.add(2.5,3)); //method } }
called 2 called 4 called 3 called
Dynamic Polymorphism: • Suppose a sub class overrides a particular method of the super class. • Let’s say, in the program we create an object of the subclass and assign it to the super class reference. • Now, if we call the overridden method on the super class reference then the sub class version of the method will be called.
class Vehicle{ public void move(){ System.out.println(“Vehicles can move!!”); } } class MotorBike extends Vehicle{ public void move(){ System.out.println(“MotorBike can move and accelerate too!!”); } }
class Test{ public static void main(String[] args){ Vehicle vh=new MotorBike(); vh.move(); // prints MotorBike can move and accelerate too!! vh=new Vehicle(); vh.move(); // prints Vehicles can move!! } }
• An object in Java that passes more than
one IS-A tests is polymorphic in nature • Static polymorphism in Java is achieved by method overloading • Dynamic polymorphism in Java is achieved by method overriding
Contoh • Class induk Person dan subclass Student, kita tambahkan subclass lain dari Person yaitu Employee. • Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah object dari subclass tersebut. Sebagai contohnya,
public static void main(String[] args) { Person ref; Student studentObject = new Student(); Employee employeeObject = new Employee(); ref = studentObject; //Person menunjuk kepada object Student //beberapa kode di sini }
• Sekarang dimisalkan kita punya method getName dalam superclass Person kita, dan kita override method ini dalam kedua subclasses Student dan Employee, public class Person { public String getName(){ System.out.println(“Person Name:” + name); return name; } } public class Student extends Person { public String getName(){ System.out.println(“Student Name:” + name); return name; } } public class Employee extends Person { public String getName(){ System.out.println(“Employee Name:” + name); return name; }
public static void main(String[] args) { Person ref; Student studentObject = new Student(); Employee employeeObject = new Employee(); ref = studentObject; //Person menunjuk kepada object Student String temp = ref.getName(); //getName dari Student class dipanggil System.out.println( temp ); ref = employeeObject; //Person menunjuk kepada object Employee String temp = ref.getName(); //getName dari Employee class dipanggil System.out.println( temp ); }
• Ketika kita mencoba memanggil method getName dari reference Person ref, method getName dari object Student akan dipanggil. Sekarang, jika kita berikan ref ke object Employee, method getName dari Employee akan dipanggil. • Kemampuan dari reference untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. • Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal, secara otomatis menunjuk method yang tepat untuk menggunakannya ke particular object berdasar subclass yang termasuk di dalamnya
• Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita mencoba melalui reference ke method. • Misalkan kita punya method static printInformation yang mengakibatkan object Person sebagai reference, kita dapat me-reference dari tipe Employee dan tipe Student ke method ini selama itu masih subclass dari class Person.
public static main( String[] args ) { Student studentObject = new Student(); Employee employeeObject = new Employee(); printInformation( studentObject ); printInformation( employeeObject ); }
public static printInformation( Person p ) { . . . . }