this → Artikel Baru – ( Atrikel Lama ↓ )

6 Ilustrasi Dynamic Method Dispatch atau Runtime Polymorphism pada Java

Method overriding adalah salah satu cara dalam bahasa Java untuk mendukung Runtime PolymorphismDynamic method dispatch adalah sebuah mekanisme dimana panggilan ke method override dapat diselesaikan pada saat runtime, ketimbang pada waktu kompilasi program.

Prasyarat pengetahuan: Overriding pada Java dan Inheritance pada Java
  • 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.

Referensi superclass dapat dilihat pada object subclass pada Java
Gambar 1 Referensi superclass dapat dilihat pada object subclass pada Java

Jika superclass mengandung method yang override oleh sebuah subclass, maka ketika ada tipe object yang berbeda dipanggil melalui referensi variabel superclass, maka method dengan versi yang berbeda akan dieksekusi. Berikut adalah contoh dari ilustrasi dynamic method dispatch:

Pahami pula, tentang semua konsep desain Web untuk tingkat pemula melalui materi lengkap JAVA [klik].


// Program java

// mengilustrasikan Dynamic

// Method Dispatch menggunakan

// hierarchical inheritance.

class

void m1() 

{System.out.println("Method"

+" di dalam A m1");} 

 

class B extends

/* overriding m1() */

void m1() 

{System.out.println("Method"

+" di dalam B m1");} 

 

class C extends

/* overriding m1() */

void m1() 

{System.out.println("Method"

+" di dalam C m1");} 

 

/* Driver class */

class Dispatch 

 

public static void main(String args[]

/* objek tipe A */ 

A a = new A(); 

 

/* objek tipe B */ 

B b = new B(); 

 

/* objek tipe C */ 

C c = new C(); 

 

// dapatkan referensi tipe A

A ref; 

  

// ref mengacu pada objek A

ref = a; 

 

// memanggil versi A dari m1() 

ref.m1(); 

 

// sekarang ref mengacu pada

// objek B

ref = b; 

 

// memanggil versi B dari m1() 

ref.m1(); 

 

// sekarang ref mengacu pada

// objek C

ref = c; 

 

// memanggil versi C dari m1()

ref.m1(); 

}

 

}

Output:
Method di dalam A m1
Method di dalam B m1
Method di dalam C 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 objek 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

Inisialisasi objek dari tipe A, B, dan C pada Java
Gambar 2 Inisialisasi objek dari tipe A, B, dan C pada Java

dua, Selanjutnya referensi dari tipe A, yang disebut juga ref dideklarasikan, yang selanjutnya akan dinisialisasi dengan nilai null seperti pada gambar 3.

A ref; //dapatkan referensi tipe A

Referensi dari tipe A, yang disebut juga ref dideklarasikan pada Java
Gambar 3 Referensi dari tipe A, yang disebut juga ref dideklarasikan pada Java

tiga, Selanjutnya adalah menugasi setiap tipe dari object (baik itu A, B, atau C) ke ref satu per satu, dan menggunakan referensinya untuk memanggil m1(). Seperti diperlihatkan pada output, dimana versi dari m1() yang dieksekusi ditentukan oleh tipe dari object yang dimaksud ketika waktu panggil dilaksanakan seperti diperlihatkan pada gambar 4, 5, dan 6.

ref = a; //r mengacu pada object A
ref.m1(); //memanggil versi A dari m1()

r mengacu pada object A pada Java
Gambar 4 r mengacu pada object A pada Java

ref = b; //r mengacu pada object B
ref.m1(); //memanggil versi B dari m1()

r mengacu pada object B pada Java
Gambar 5 r mengacu pada object B pada Java

ref = c; //r mengacu pada object C
ref.m1(); //memanggil versi C dari m1()

r mengacu pada object C pada Java
Gambar 6 r mengacu pada object C pada Java


Baca juga, tentang materi bahasa pemrograman lainnya melalui Materi Lengkap 

Bahasa Pemrograman [klik].


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

Contoh:

// Program Java

// mengilustrasikan fakta

// bahwa runtime polymorphism

// tidak bisa dilakukan pada

// data member.

 

/* class A */

class

{int x = 10;} 

 

/* class B */

class B extends

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

}

 

}

Output:
10

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
  • satu, Dynamic method dispatch memungkinkan Java untuk mendukung override dari method yang mana merupakan pusat untuk runtime polymoorphism.
  • dua, 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.
  • tiga, Memungkinkan untuk subclass menambahkan method spesifik pada subclass untuk mendefinisikan beberapa implemetasi spesifik.

Static vs dynamic binding
  • satu, Static binding selesai dijalankan prosesnya pada saat waktu kompilasi sedangkan dynamic binding selesai dijalankan prosesnya pada saat waktu runtime.
  • dua, privatefinal, dan static method serta variabel lain menggunakan static binding dan terikat oleh kompilator, sementara method override terikat selama runtime berdasarkan tipe dari runtime object.

Komentar

  1. Apakah polimorfisme atau polymorphism adalah dua konsep yang sama pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Polimorphism 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.

      Hapus
  2. Secara sederhana apa yang dimaksud dengan polimorfisme pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Polimorfisme 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.

      Hapus
  3. Polimorfisme menggambarkan pola dalam pemrograman berorientasi object dimana class memiliki fungsionalitas yang berbeda sambil berbagi antaramuka yang sama.

    Keindahan 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.

    BalasHapus

Posting Komentar

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung. :D

Catatan: setiap iklan yang ditayangkan pada blog ini bersumber dari google adsense. Dengan jenis iklan yang dipilih adalah, sebagai berikut.

POIN 1, Iklan yang ditampilkan hanya boleh berbahasa indonesia atau berbahasa inggris. Tidak menerima jenis iklan dalam bahasa yang lain selain yang telah disebutkan karena blog ini dibuat untuk para pengunjung dari negara atau orang yang berbahasa Indonesia.

POIN 2, Setiap gambar yang ditampilkan pada iklan sifatnya tidak mengganggu para pengunjung yang melihat blog, atau tidak boleh menampilkan gambar yang bersifat menjijikkan atau merangsang rasa mual.

POIN 3, Jenis iklan yang dipasang bukan merupakan iklan spam, atau berisi dan mengarahkan pengunjung ke alamat yang berbahaya atau bersifat penipuan.

POIN 4, Segala bentuk iklan tunduk dan patuh pada ketentuan dari pihak Adsense google dan pemilik blog.

POIN 5, Segala jenis iklan yang tidak bertentangan dengan poin 1-4 yang dijelaskan sebelumnya, maka iklan tersebut dapat ditampilkan pada blog.



~ Ikatlah Ilmu dengan Memostingkannya ~

Hot Artikel

Enkapsulasi pada Java

Perbedaan stdio.h dan stdlib.h pada Bahasa C

Penjelasan Singkat tentang Konsep Asosiasi, Komposisi, dan Agregasi pada Java

2 Jenis Utama Kegiatan Penelitian Berdasarkan Waktunya, Crosssectional Salah Satunya