Anda di halaman 1dari 11

Polimorfisme

Melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi
objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman
pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila
sebuah burung menerima pesan “gerak cepat”, dia akan menggerakan sayapnya dan terbang.
Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari.
Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan
hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat
memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program
yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam
pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai
polimorfisme melalui penggunaan fungsi kelas-pertama.

http://chalax212.wordpress.com/2012/09/26/konsep-dasar-object-oriented-programming-oop/

Sekarang, class induk Person dan subclass Student dari contoh sebelumnya, kita tambahkan subclass
lain dari Person yaitu Employee. Di bawah ini adalah hierarkinya, Person
Student Employee
Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah object dari
subclass tersebut. Sebagai contohnya,

public static 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;

Gambar 3: Hirarki dari class induk Person

J.E.N.I.

Pengenalan Pemrograman 1 8

public class Employee extends Person

public String getName(){

System.out.println(“Employee Name:” + name);

return name;

Kembali ke method utama kita, 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.

public static 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 );

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 ){

....

}
POLIMORFISM
5. Polymorphism
Polymorphism adalah kemampuan 2 buah object yang berbeda untuk merespon pesan
permintaan yang sama dalam suatu cara yang unik. Contoh, saya melatih anjing saya
dengan perintah untuk menggonggong dan juga saya melatih kuda untuk merespon
perintah saya untuk meringkik. Saya lakukan latihan untuk merespon kepada mereka
dengan perintah lisan. Melalui polymorphism saya tahu bahwa anjing dan kuda akan
merespon dengan gonggongan atau ringkikan.

Polymorphism itu sendiri terbagi dua yaitu: Overloading dan Overiding


 Overloading : adalah pemakaian beberapa methods ataupun properties dengan nama yang
sama, tetapi memiliki daftar parameter/argument yang berbeda. Perbedaan yang dimaksud
adalah beda jumlah parameter, beda tipe data, atau beda keduanya (jumlah parameter dan tipe
data). Methods ataupun properties yang hanya beda return value (nilai balik) tidak bisa
dikatakan sebagai overloading. Keyword yang dipakai adalah Overloads. Jika dalam satu
class, keyword ini bersifat optional artinya kita tidak harus menambahkan keyword Overloads
ketika mendefinisikan beberapa methods ataupun properties yang menerapkan konsep
overloading. Apabila kita tetap ingin memakainya, maka keyword Overloads harus digunakan
di semua methods ataupun properties tadi. Apabila beda class, keyword Overloads ini harus
digunakan.
 Overriding : kemampuan class turunan untuk memodifikasi methods atau properties dari class
induk. Dengan overriding kita bisa membuat implementasi baru pada methods atau properties
di class turunan yang berbeda dengan methods atau properties yang ada pada class induk.
Perbedaan utama antara Overloading dengan Overriding adalah pada pemakaian
parameter. Pada overloading kita bisa mengubah parameter, sedangkan pada
overriding kita tidak boleh mengubah parameter.

Ada beberapa keyword yang bisa dipakai di overriding, antara lain:

 Keyword Overridable
Keyword ini digunakan pada methods atau properties di class induk yang menandakan
bahwa methods atau properties tadi bisa di-override pada class turunan.

 Keyword Overrides
Keyword ini digunakan pada class turunan yang menandakan bahwa methods atau
properties tadi meng-override methods atau properties yang ada di class induk.
 Keyword Not Overridable
Keyword ini digunakan pada methods atau properties di suatu class yang menandakan
bahwa methods atau properties tadi tidak bisa di-override pada class turunan.

Keyword MustOverride
Keyword ini digunakan untuk mendeklarasikan abstract methods atau abstract
properties. Hanya ada deklarasi header di sini, tanpa ada pendefinisian implementasi.
Class yang mempunyai abstract methods atau abstract properties harus didefinisikan
juga sebagai abstract class dengan keyword MustInherit.

nahh langsung kita lihat contoh syntax polimorfis yang Overloading dulu yaakk,,

>>>Overloading C#
1 namespace csharp_polymorpism
2 {
public class KelilingSegi
3 {
4 public double sisiA;
5 public double sisiB;
6 public double sisiC;
7 //Constuctor satu
public void Keliling (double a){
8 this.sisiA=a;
9 this.sisiB=1;
10 this.sisiC=1;
11 }
//Constuctor dua
12 public void Keliling (double a, double b){
13 this.sisiA=a;
14 this.sisiB=b;
15 this.sisiC=1;
16 }
//Constuctor tiga
17 public void Keliling (double a, double b, double c){
18 this.sisiA=a;
19 this.sisiB=b;
20 this.sisiC=c;
}
21 }
22 class Program
23 {
24 public static void Main(string[] args)
25 {
KelilingSegi tampil = new KelilingSegi();
26 KelilingSegi tampil_dua = new KelilingSegi();
27 KelilingSegi tampil_tiga = new KelilingSegi();
28 Console.WriteLine("Tampil Constructor Pertama");
29 tampil.Keliling(10);
30 Console.WriteLine("Sisi A = "+tampil.sisiA);
Console.WriteLine("Sisi B = "+tampil.sisiB);
31 Console.WriteLine("Sisi C = "+tampil.sisiC);
32 Console.WriteLine("Tampil Constructor Kedua");
33 tampil_dua.Keliling(10, 11);
34 Console.WriteLine("Sisi A = "+tampil_dua.sisiA);
35 Console.WriteLine("Sisi B = "+tampil_dua.sisiB);
Console.WriteLine("Sisi C = "+tampil_dua.sisiC);
36 Console.WriteLine("Tampil Constructor Ketiga");
37 tampil_tiga.Keliling(10, 11, 12);
38 Console.WriteLine("Sisi A = "+tampil_tiga.sisiA);
39 Console.WriteLine("Sisi B = "+tampil_tiga.sisiB);
Console.WriteLine("Sisi C = "+tampil_tiga.sisiC);
40 Console.Write("Press any key to continue . . . ");
41 Console.ReadKey(true);
42 }
43 }
44 }
45
46
47
48
49
50
51
52
53
>>>Overloading Java
1 package keliling;
2 public class KelilingSegi {
double sisiA;
3 double sisiB;
4 double sisiC;
5 //Constuctor satu
6 KelilingSegi (double a)
7 {
this.sisiA=a;
8 this.sisiB=1;
9 this.sisiC=1;
10 }
11 //Constuctor dua
KelilingSegi (double a, double b)
12
{
13 this.sisiA=a;
14 this.sisiB=b;
15 this.sisiC=1;
16 }
//Constuctor tiga
17 KelilingSegi (double a, double b, double c)
18 {
19 this.sisiA=a;
20 this.sisiB=b;
21 this.sisiC=c;
}
22 }
23 -------------------------------------------------------------------------------
24 package keliling;
25 public class Keliling {
public static void main(String[] args) {
26 System.out.println("Tampil Constructor Pertama");
27 KelilingSegi tampilan = new KelilingSegi (10);
28 System.out.println("Sisi A : "+tampilan.sisiA);
29 System.out.println("Sisi B : "+tampilan.sisiB);
30 System.out.println("Sisi C : "+tampilan.sisiC);
31
32 System.out.println("Tampil Constructor Kedua");
KelilingSegi tampilan_dua = new KelilingSegi (10, 12.3);
33 System.out.println("Sisi A : "+tampilan_dua.sisiA);
34 System.out.println("Sisi B : "+tampilan_dua.sisiB);
35 System.out.println("Sisi C : "+tampilan_dua.sisiC);
36 System.out.println("Tampil Constructor Ketiga");
KelilingSegi tampilan_tiga = new KelilingSegi (10, 12.3, 11.5);
37 System.out.println("Sisi A : "+tampilan_tiga.sisiA);
38 System.out.println("Sisi B : "+tampilan_tiga.sisiB);
39 System.out.println("Sisi C : "+tampilan_tiga.sisiC);
40 }
41 }
42
43
44
45
46
47
48
49
>>>Overloading C++
1 #include
2 using namespace std;
class SegiTiga
3 {
4 public:
5 double getKeliling(void)
6 {
7 return sisiA + sisiB + sisiC;
}
8 void setSisiA( double a )
9 {
10 sisiA = a;
11 }
void setSisiB( double b )
12
{
13 sisiB = b;
14 }
15 void setSisiC( double c )
16 {
sisiC = c;
17 }
18 SegiTiga operator+(const SegiTiga & d)
19 {
20 SegiTiga segi;
21 segi.sisiA = this-> sisiA + d. sisiA;
segi.sisiB = this-> sisiB + d. sisiB;
22 segi.sisiC = this-> sisiC + d. sisiC;
23 return segi;
24 }
25 private:
double sisiA;
26 double sisiB;
27 double sisiC;
28 };
29 int main( )
30 {
31 SegiTiga segi1;
SegiTiga segi2;
32 SegiTiga segi3;
33 double keliling = 0.0;
34 // spesifikasi Segitiga 1
35 segi1.setSisiA(6.0);
segi1.setSisiB(7.0);
36 segi1.setSisiC(5.0);
37 // spesifikasi Segitiga 2
38 segi2.setSisiA(12.0);
39 segi2.setSisiB(13.0);
40 segi2.setSisiC(10.0);
// Keliling segitiga 1
41 keliling = segi1.getKeliling();
42 cout << "Keliling Segitiga 1 : " << keliling <<endl;
43 // Keliling segitiga 2
44 keliling = segi2.getKeliling();
cout << "Keliling Segitiga 2 : " << keliling <<endl;
45 // Menambahkan 2 object segitiga
46 segi3 = segi1 + segi2;
47 // keliling segitiga 3
48 keliling = segi3.getKeliling();
49 cout << "Keliling segitiga 3 : " << keliling <<endl;
return 0;
50 }
51
52
53
54
55
56
57
58
59
60
61
ah itu diaaaa contoh sintaxnya :D
nih hasilnya :)

ya itu dia dechh,, sekarang langsung kita lihat contoh syntax polimorfis
yangOveriding yaakk,,
>>>Overiding C#
1 namespace csharp_overiding
2 {
3 class first
4 {
public void show()
5 {
6 Console.WriteLine("Keterangan ini ditampilkan oleh class first");
7 }
8 }
class second : first {
9 public void show1()
10 {
11 Console.WriteLine("Keterangan ini ditampilkan oleh class dua");
12 }
13 }
class Program {
14
15 public static void Main(string[] args)
16 {
17 first satu = new first();
18 satu.show();
second dua = new second();
19 dua.show1();
20 Console.Write("Press any key to continue . . . ");
21 Console.ReadKey(true);
22 }
23 }
}
24
25
26
27
28

>>>Overiding Java
1 package riding;
2
3 class first
{
4 public void show()
5 {
6 System.out.println("Keterangan ini ditampilkan oleh class first");
7 }
}
8 class second extends first
9 {
10 public void show()
11 {
12 System.out.println("Keterangan ini ditampilkan oleh class second");
}
13 }
14 public class Main {
15 public static void main(String[] args)
16 {
17 first satu = new first();
satu.show();
18 second dua = new second();
19 dua.show();
20 }
21 }
22
23
24
25

>>>Overiding C++
1
2
3 #include <iostream>
4 using namespace std;
//overriding
5 class Sepeda{
6 public: void cetak();
7 };
8 void Sepeda::cetak()
9 {
cout<<"ini adalah sepeda"<<endl;
10 }
11 class Matic : public Sepeda{
12 public: void cetak();
13 };
void Matic::cetak()
14 {
15 cout<<"ini adalah sepeda Matic"<<endl;
16 }
17 int main()
18 {
Matic a;
19 a.cetak();
20 return 0;
21 }
22
23
ah itu diaaaa contoh sintaxnya :D
nih hasilnya :)
alhamdulillah udah duluuu daaahhh pusinggg2,, :D
Wassalamu’alaikum Wr.Wb

Anda mungkin juga menyukai