[ HTML ] [ Java ] [ Bahasa C ]


Selasa, Mei 14, 2019

Static vs Dynamic Binding pada Java

Static Binding: binding yang dapat diselesaikan pada saat waktu compile oleh compiler dikenal sebagai static atau early binding. Binding dari method static, private, dan final diselesaikan pada saat waktu compile.

Kenapa binding dari static, final, dan private method selalu static?
Static binding memiliki performa yang lebih baik karena tidak ada overhead ekstra yang dipersyaratkan. Compiler mengetahui bahwa method seperti itu tidak bisa overridden dan selalu dapat diakses oleh object dari class lokal. Karenanya compiler tidak memiliki kesulitan apapun untuk menentukan object dari class (class lokal tentunya). Inilah alasan kenapa binding method adalah static. Perhatikan contoh berikut ini:

Sebelum lebih jauh, coba tebak nilai output yang akan dihasilkan oleh program?
Output:
print in superclass.
print in superclass.

Seperti yang terlihat, dalam kedua kasus method print dari superclass dipanggil. Mari perhatikan kenapa hal tersebut dapat terjadi:
satu, Dapat diciptakan satu object dari subclass dan satu object dari superclass dengan referensi dari superclass.
dua, Ketika method print dari superclass adalah static, maka compiler dapat mengetahui bahwa method tersebut tidak akan overridden dalam subclass dan karenya compiler dapat mengenali hal tersebut, maka selama waktu compile, method print akan dipanggil dan tidak akan terjadi ambiguitas.

Pada latihan berikut ini, nilai referensi dapat diubah dari object B menuju subclass dan memeriksa hasil output-nya.

Dynamic Binding: pada dynamic binding compiler tidak memutuskan method mana yang akan dipanggil. Overriding adalah sebuah contoh sempurna dari dynamic binding. Dalam overriding kedua parent dan child class memiliki method yang sama. Perhatikan contoh berikut ini:

Output:
print in superclass.
print in subclass.

Hasil dari output memiliki keluaran yang berbeda. kenapa? 
satu, Karena pada contoh program method tidak static.
dua, Karena selama kompilasi, compiler tidak memiliki gagasan method print mana yang akan dipanggil ketika compiler hanya memiliki variabel referensi saja dan tidak oleh tipe dari object. Dan karenya hal tersebut, maka binding akan ditunda menuju ke runtime dan versi koresponden dari print akan dipanggil berdasarkan dari tipe object.

Point penting
satu, Anggota private, final, dan static (method dan variabel) menggunakan static binding sementara untuk method virtual (pada method Java virtual bersifat default) binding dilakukan selama runtime berdasarkan runtime object.
dua, Static binding menggunakan tipe informasi untuk binding sementara dynamic binding menggunakan object untuk menyelesaikan binding.
tiga, Overloaded method dapat diselesaikan (memutuskan method mana yang akan dipanggil ketika terdapat lebih dari satu method dengan nama sama) menggunakan static binding sementara overridden method menggunakan dynamic binding saat runtime.





Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D