Static dan Dynamic Binding Java dan Fungsinya
class Animal {
void sound() {
System.out.println("Animal
makes a sound");}
}
class Dog extends Animal {
void sound() {
System.out.println("Dog
barks");}
}
public class Main {
public static void
main(String[] args) {
// Polymorphism
Animal animal = new Dog();
// Panggilan metode
animal.sound(); }
}
Binding dari Method Static, Final, dan Private Selalu Static
public class NewClass
{
public static class superclass
{
static void print()
{System.out.println("dicetak"
+" dalam superclass.");}
}
public static class subclass extends superclass
{
static void print()
{System.out.println("dicetak"
+" dalam subclass.");}
}
public static void main(String[] args)
{superclass A = new superclass();
superclass B = new subclass();
A.print();
B.print();}
}
dicetak dalam superclass.
Seperti yang terlihat dalam kedua kasus method print dari superclass yang dipanggil sebelumnya. Makan, perhatikan kenapa hal tersebut dapat terjadi:
- Dapat diciptakan satu object dari subclass dan satu object dari superclass dengan referensi dari superclass.
- Ketika method print dari superclass adalah static, maka kompilator dapat mengetahui bahwa method tersebut tidak akan overridden dalam subclass dan karenya kompilator dapat mengenali hal tersebut, maka selama waktu kompilasi, method print akan dipanggil dan tidak akan terjadi ambiguitas sama sekali.
Baca Juga:
class Animal {
void sound() {
System.out.println("Animal
makes a sound");}
}
class Dog extends Animal {
void sound() { System.out.println("Dog barks");}
}
public class Main {
public static void
main(String[] args) {
Animal animal = getAnimal();
// Panggilan metode
animal.sound();}
static Animal getAnimal() {
return new Dog();}
}
public class NewClass
{
public static class superclass
{
void print()
{System.out.println("dicetak"
+" dalam superclass.");}
}
public static class subclass extends superclass
{
@Override
void print()
{System.out.println("dicetak"
+" dalam subclass.");}
}
public static void main(String[] args)
{superclass A = new superclass();
superclass B = new subclass();
A.print();
B.print();}
}
dicetak dalam subclass.
Hasil dari output memiliki keluaran yang berbeda, karena:
- Pada contoh program method tidak static.
- Selama kompilasi, kompilator tidak memiliki gagasan method print mana yang akan dipanggil ketika kompilator hanya memiliki variabel referensi saja dan tidak oleh tipe dari object. Dan karena hal tersebut, maka binding akan ditunda menuju ke runtime dan versi koresponden dari print akan dipanggil berdasarkan tipe object-nya.
Point penting:
- Anggota private, final, dan static yang berupa method dan variabel menggunakan static binding sementara untuk method virtual pada method Java virtual yang bersifat default, binding dilakukan selama runtime berdasarkan runtime object.
- Static binding menggunakan tipe informasi untuk binding sementara dynamic binding menggunakan object untuk menyelesaikan binding.
- Overloaded method dapat diselesaikan dengan 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.
- Static Binding:
- Efisiensi: Karena binding terjadi pada saat kompilasi, itu bisa lebih efisien daripada dynamic binding.
- Keamanan: Karena semua binding dilakukan pada saat kompilasi, kesalahan terkait pemanggilan metode bisa dideteksi lebih awal.
- Prediktabilitas: Behavior program bisa diprediksi dengan lebih baik karena binding telah ditentukan sebelumnya.
- Dynamic Binding:
- Polimorfisme: Mendorong polimorfisme dalam kode, memungkinkan kelas turunan untuk mengganti perilaku metode yang diwarisi dari kelas dasar.
- Fleksibilitas: Memungkinkan pemilihan metode yang tepat tergantung pada jenis objek yang sebenarnya dibuat pada saat runtime, memberikan fleksibilitas yang lebih besar dalam desain program.
- Ekstensibilitas: Membuat kode lebih mudah untuk diubah dan diperluas karena perilaku metode bisa ditentukan secara dinamis.
- Kekurangan Static Binding:
- Keterbatasan Polimorfisme: Static binding membatasi kemampuan polimorfisme karena metode yang dipanggil ditentukan oleh tipe referensi pada saat kompilasi. Ini berarti bahwa jika pengembang memiliki referensi dari kelas induk, bahkan jika objek yang sebenarnya dibuat adalah turunan dari kelas tersebut, hanya metode yang ditentukan oleh kelas induk yang dapat dipanggil. Ini dapat mengurangi fleksibilitas dalam kode.
- Keterbatasan dalam Hierarki Warisan: Dalam hierarki warisan yang kompleks, penggunaan static binding dapat menjadi kurang efektif karena metode yang dipanggil ditentukan oleh tipe referensi, bukan oleh tipe objek yang sebenarnya dibuat. Hal ini dapat menyebabkan kebingungan dan memerlukan penanganan yang lebih rumit dalam beberapa kasus.
- Kekurangan Dynamic Binding:
- Kinerja yang Lebih Lambat: Dynamic binding memerlukan pengecekan tipe objek pada saat runtime untuk menentukan metode mana yang harus dipanggil. Hal ini bisa mengakibatkan kinerja yang sedikit lebih lambat dibandingkan dengan static binding, terutama dalam program yang sangat besar atau dalam lingkungan yang memerlukan kinerja tinggi.
- Kesalahan Pada Waktu Eksekusi: Karena dynamic binding menentukan metode yang akan dipanggil pada saat runtime, jika terjadi kesalahan dalam logika program, kesalahan ini mungkin tidak terdeteksi sampai program dijalankan. Ini dapat menyebabkan debug yang lebih sulit karena kesalahan mungkin tidak muncul sampai di waktu eksekusi.
- Kesulitan Pemeliharaan: Karena metode yang akan dipanggil ditentukan secara dinamis pada saat runtime, kode yang menggunakan dynamic binding bisa menjadi sulit dipahami dan dipelihara. Terutama dalam lingkungan pengembangan yang besar dan kompleks, dynamic binding dapat menyulitkan untuk melacak alur eksekusi program.
Kesimpulan
- Interface dan Inheritance Java dan Fungsinya
- Menggunakan Final Inheritance Java dan Fungsinya
- Mengakses Anggota Grandparent Java Menggunakan Keyword Super
- Method Private Overriding Java dan Fungsinya
- Method Class Derived Java dan Fungsinya
- Parent dan Child Class Java Dengan Anggota Data Sama
- Object Serialisasi Java Terhadap Inheritance
6 komentar untuk "Static dan Dynamic Binding Java dan Fungsinya"
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 -
Apa yang dimaksud dengan static binding pada Java?
BalasHapusStatic binding pada java adalah mengacu pada pelaksanaan program dimana jenis object ditentukan atau diketahui pada waktu kompilasi program, yaitu ketika kompilator mengeksekusi kode program, maka kompilator akan mengetahui jenis object atau class yang dimiliki oleh object tersebut.
HapusBagaimana cara static binding bekerja pada Java?
BalasHapusStatic binding terjadi pada waktu kompilasi sementara dimana dynamic binding terjadi pada waktu proses tersebut. Ketika proses overriding terjadi dan referensi jenis tipe parent ditetapkan oleh object dari jenis instance class, dimana proses binding tersebut diselesaikan selama waktu proses dijalankan pada Java.
HapusApa yang dimaksud dengan dynamic binding pada Java?
BalasHapusDalam dynamic binding Java, method call terikat pada body method ketika runtime dijalankan. Hal ini juga dikenal sebagai late binding, yang dilakukan dengan menggunakan method instance.
Hapus