Pengertian Polimorfisme Java dan Dynamic Method Dispatch
Pengertian Polimorfisme
- Overriding: Menerapkan metode yang sama yang didefinisikan dalam kelas induk (superclass) di kelas anak (subclass) dengan perilaku yang berbeda.
- Dynamic Method Dispatch: Memungkinkan pemanggilan metode untuk ditentukan secara dinamis saat program berjalan berdasarkan tipe object aktualnya.
- Ketika method override dipanggil melalui referensi superclass, maka Java akan menentukan versi yang mana (superclass atau subclass) dari method tersebut yang akan dieksekusi berdasarkan tipe object yang dimaksud ketika waktu pemanggilan dilakukan. Proses tersebut dilakukan pada saat runtime.
- Pada waktu runtime, hal ini tergantung pada tipe dari object referensi untuk (bukan tipe dari referensi variabel) menentukan versi dari method override yang akan dieksekusi.
- Variabel referensi superclass dapat dilihat pada object subclass. Hal ini dikenal juga dengan istilah upcasting. Java menggunakan kemampuan ini untuk memanggil method override pada saat runtime seperti diperlihatkan pada gambar 1.
Dynamic Method Dispatch
class Hewan
{
void suara()
{System.out.println("Hewan bersuara...");}
}
class Anjing extends Hewan {
void suara()
{System.out.println("Guk guk");
}
}
class Kucing extends Hewan {
void suara()
{System.out.println("Meong");}
}
public class Main {
public static void
main(String[] args)
{
Hewan hewan1 = new Anjing();
Hewan hewan2 = new Kucing();
hewan1.suara();
// Output: Guk guk
hewan2.suara();
// Output: Meong
}
}
// Program java
// mengilustrasikan Dynamic
// Method Dispatch menggunakan
// hierarchical inheritance.
class A
{
void m1()
{System.out.println("Method"
+" di dalam A m1");}
}
class B extends A
{
/* overriding m1() */
void m1()
{System.out.println("Method"
+" di dalam B m1");}
}
class C extends A
{
/* overriding m1() */
void m1()
{System.out.println("Method"
+" di dalam C m1");}
}
/* Driver class */
class Dispatch
{
public static void main(String args[])
{
/* object tipe A */
A a = new A();
/* object tipe B */
B b = new B();
/* object tipe C */
C c = new C();
// dapatkan referensi tipe A
A ref;
// ref mengacu pada object A
ref = a;
// memanggil versi A dari m1()
ref.m1();
// sekarang ref mengacu pada
// object B
ref = b;
// memanggil versi B dari m1()
ref.m1();
// sekarang ref mengacu pada
// object C
ref = c;
// memanggil versi C dari m1()
ref.m1();
}
}
Penjelasan: Pertama, program sebelumnya menciptakan satu superclass yang disebut A dan dua subclass yang disebut B dan C. Kedua, subclass tersebut overrides m1() method.
satu, Pada dalam main() method dispatch class, inisialisasi object dari tipe A, B, dan C dideklarasikan seperti pada gambar 2.
A a = new A(); //object tipe A
B b = new B(); //object tipe B
C c = new C(); //object tipe C
A ref; //dapatkan referensi tipe A
ref = a; //r mengacu pada object A
ref.m1(); //memanggil versi A dari m1()
ref.m1(); //memanggil versi B dari m1()
ref.m1(); //memanggil versi C dari m1()
Runtime Polymorphism dengan Data Anggota
Pada bahasa Java, override hanya dapat dilakukan pada method tetapi tidak pada variabel (data member), jadi runtime polymorphism tidak bisa dilakukan pada data member.// Program Java
// mengilustrasikan fakta
// bahwa runtime polymorphism
// tidak bisa dilakukan pada
// data member.
/* class A */
class A
{int x = 10;}
/* class B */
class B extends A
{int x = 20;}
/* Driver class */
public class Test
{
public static void main(String args[])
{
/* object dari tipe B */
A a = new B();
// data member dari class A
// akan diakses.
System.out.println(a.x);
}
}
Penjelasan: Pada program sebelumnya, kedua class A (superclass) dan class B (subclass) memiliki variabel yang sama yaitu 'X'. Selanjutnya akan dibuat object class B, dari referensi 'a' yang merupakan tipe dari class A. Karena variabel tidak bisa override, maka statement "a.X" akan selalu memperlihatkan data anggota dari superclass.
Keunggulan dari Dynamic Method Dispatch:
- Dynamic method dispatch memungkinkan Java untuk mendukung override dari method yang mana merupakan pusat untuk runtime polymoorphism.
- Memungkinkan class untuk melakukan spesifikasi method yang dapat digunakan secara umum untuk semua derivatifnya, sementara memungkinkan untuk subclass untuk mendefinisikan secara spesifik implementasi dari sebagian atau keseluruhan dari method.
- Memungkinkan untuk subclass menambahkan method spesifik pada subclass untuk mendefinisikan beberapa implemetasi spesifik.
Static vs dynamic binding:
- Static binding selesai dijalankan prosesnya pada saat waktu kompilasi sedangkan dynamic binding selesai dijalankan prosesnya pada saat waktu runtime.
- private, final, dan static method serta variabel lain menggunakan static binding dan terikat oleh kompilator, sementara method override terikat selama runtime berdasarkan tipe dari runtime object.
- Fleksibilitas: Polimorfisme memungkinkan fleksibilitas dalam desain dan implementasi, karena memungkinkan penggunaan object dengan cara yang berbeda melalui referensi yang sama.
- Penggunaan Kode Ulang: Polimorfisme memungkinkan penggunaan kembali kode melalui penggunaan kelas induk dan kelas turunannya.
- Keterbacaan dan Pemeliharaan Kode: Dynamic Method Dispatch memungkinkan pemanggilan metode yang sesuai dengan perilaku object aktual, membuat kode lebih mudah dimengerti dan dipelihara.
- Cara Menggunakan Method Overloading Java dan Fungsinya
- Cara Membuat Program Overriding Java dan Fungsinya
- Cara Menggunakan Overriding Java dan Fungsinya
- Cara Menggunakan Overloading Java dan Fungsinya
- PUBLIC STATIC VOID MAIN Java dan Fungsinya
- Overloading dan Overriding Static Java dan Fungsinya
- Shadowing Fungsi Static Java dan Fungsinya
5 komentar untuk "Pengertian Polimorfisme Java dan Dynamic Method Dispatch"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apakah polimorfisme atau polymorphism adalah dua konsep yang sama pada bahasa pemrograman Java?
BalasHapusPolimorphism atau polimorfisme dapat juga dimaknai sebagai "banyak bentuk", dan hal tersebut dapat terjadi ketika user memiliki banyak class yang barkaitan satu sama lain melalui mekanisme inheritance atau pewarisan. Polimorfisme menggunakan method tersebut untuk melakukan beberapa tugas yang berbeda, dimana hal ini memungkinkan untuk melakukan satu tindakan dengan cara atau pendekatan yang berbeda.
HapusSecara sederhana apa yang dimaksud dengan polimorfisme pada bahasa pemrograman Java?
BalasHapusPolimorfisme merupakan kemampuan bahasa pemrograman untuk menampilkan antarmuka yang sama untuk beberapa tipe data dasar yang berbeda. Polimorfisme adalah kemampuan object yang berbeda untuk merespons pesan yang sama dengan cara yang unik.
HapusPolimorfisme menggambarkan pola dalam pemrograman berorientasi object dimana class memiliki fungsionalitas yang berbeda sambil berbagi antaramuka yang sama.
BalasHapusKeindahan dari polimorfisme adlaah bahwa kode yang bekerja dengan class yang berbda tidak perlu sama sekali mengetahui class mana yang digunakannya karena semua class tersebut digunakan dengan cara yang sama.