Memahami Dynamic Dan Static Binding Pada Kegiatan Java
Apa Yang Dimaksud Dengan Binding?
Dalam mencar ilmu jadwal Java niscaya tidak terlepas dari yang namanya method. Binding merupakan hubungan antara pemanggilan method dan definisi method.Untuk lebih jelasnya perhatikan gambar di bawah ini:
Pada gambar di atas, pemanggilan method dengan kendaraan_1.bergerak() merupakan binding yang terhubung dengan definisi method bergerak() demikian juga dengan kendaraan_1.berhenti() merupakan binding yang terhubung dengan definisi method berhenti().
Sebagai hukum pada Java, pada setiap method yang dipanggil maka akan selalu terdapat definisi method. Karena error akan muncul kalau compiler tidak menemukan definisi method yang sempurna untuk setiap pemanggilan method.
Dynamic Binding
Seperti yang sudah anda ketahui, method sanggup diimplementasikan dalam beberapa class melalui rantai inheritance.Kemudian Java Virtual Machine akan menetapkan mengenai method mana yang akan dipilih pada ketika runtime.
Sebelum lebih memahami mengenai dynamic binding ini, ada dua istilah yang perlu dimengerti terlebih dahulu, yaitu:
- Tipe yang dideklarasikan, ini yaitu variabel referensi untuk objek atau declared type.
- Tipe aktual, yaitu class kasatmata dimana declared type menjadi variabel referensi untuk objek dari class tersebut
Object myObject = new A();
System.out.println(myObject.toString());
Pada tumpuan di atas, tipe kasatmata dari myObject yaitu A alasannya yaitu myObject mereferensikan suatu objek yang dibentuk dengan new A();.
Selanjutnya, method toString() manakah yang akan di panggil? Ternyata method toString() yang akan dipanggil ditetapkan oleh tipe kasatmata dari myObject. Ini di kenal dengan dynamic binding.
Seperti inilah tumpuan cara kerja dynamic binding:
a) Terdapat beberapa class yang terkait dalam rantai inheritance yaitu class A, B, C, D dan E, dan paling puncak yaitu class Objeck.
c) Class E yaitu subclass dari class D, class D yaitu subclass dari class C demikian seterusnya hingga dengan class A sub class dari Object.
Perhatikan diagram berikut ini:
c) Seperti kita ketahui, bahwa class Object mempunyai method toString(), dan class lain sanggup meng-override method tersebut. Dalam hal ini method toString tersebut di implementasikan oleh class A, B, dan C.
Perhatikan isyarat di bawah ini:
public class A extends Object { @Override public String toString(){ return "method toString() dari class A dipanggil!"; } }
public class B extends A { @Override public String toString(){ return "method toString() dari class B dipanggil!"; } }
public class C extends B { @Override public String toString(){ return "method toString() dari class C dipanggil!"; } }
public class D extends C { //tidak mengoverride method toString() }
public class E extends D{ //tidak mengoverride method toString() }
Kemudian class dibawah ini untuk mendemonstrasikan dynamic binding:
public class TestDynamicBinding { //Method perintah dengan parameter tipe Object static void perintah(Object myObject){ System.out.println(myObject.toString()); } public static void main(String[] args) { perintah(new E());//memanggil method toString dari class C perintah(new D());//memanggil method toString dari class C perintah(new C());//memanggil method toString dari class C perintah(new B());//memanggil method toString dari class B perintah(new A());//memanggil method toString dari class A perintah(new Object()); } }
Contoh output:
method toString() dari class C dipanggil!
method toString() dari class C dipanggil!
method toString() dari class C dipanggil!
method toString() dari class B dipanggil!
method toString() dari class A dipanggil!
java.lang.Object@3ee284
Penjelasan:
- Method perintah() mengambil parameter dengan tipe Object, sehingga anda sanggup memanggil method tersebut dengan objek apapun, contohnya new E(), new D(), new C(), new B(), new A() dan new Object().
- Ketika method perintah(Object myObject) dieksekusi, maka argumen method toString() milik myObject akan dipanggil. Yang perlu menjadi perhatian di sini yaitu myObject ini sanggup saja merupakan instance dari class E, D, C, B, A atau Object.
- Class C, B, A dan Object mempunyai implementasi tersendiri pada method toString() dimana implementasi tersebut akan ditetapkan oleh tipe kasatmata myObject pada ketika runtime.
- Ketika myObject merupakan instance dari class E dan dipasskan pada method dengan perintah(new E());, maka compiler akan mencari method toString() yang diimplementasikan pada class E, kemudian kalau tidak di temukan akan mencari lagi di class D dan seterusnya.
- Karena class E dan D tidak mengimplementasikan method toString(), maka compiler akan memakai method toString() dari class C ketika myObject merupakan instance dari class E atau class D. Alur pencarian ini akan dilakukan dari class yang paling spesifik terlebih dahulu kemudian terus sedikit demi sedikit pada class yang paling general pada inheritance.
- Ketika myObject merupakan instance dari clas C, B, A, dan Object, maka method toString() yang dipanggil akan sesuai dengan implementasinya masing-masing pada class-class tersebut.
Suatu method sanggup diimplementasikan dalam beberapa class melalui inheritance. Kemudian Java Virtual Machine secara dinamis melaksanakan bind pada method tersebut pada ketika runtime dan implementasi itu ditetapkan oleh tipe kasatmata dari variabel.
Dynamic binding terjadi pada ketika runtime, disebut juga late binding alasannya yaitu terjadi pada ketika jadwal berjalan.
Static Binding
Static binding terjadi pada ketika compile time dan disebut juga early binding alasannya yaitu terjadi sebelum jadwal berjalan. Kaprikornus ini hanyalah konsep di mana objek sanggup mengetahui method mana yang akan dipanggil pada ketika compile time.Method final, private dan static termasuk ke dalam static binding alasannya yaitu method tersebut tidak sanggup di override dan tipe dari class tersebut ditetapkan pada ketika compile time.
Berikut ini yaitu contohnya :
public class Hewan { public static void makan(){ System.out.println("Hewan makan!"); } }
public class Harimau extends Hewan { public static void makan(){ System.out.println("Harimau makan!"); } public static void main(String[] args) { Hewan objek1 = new Harimau(); objek1.makan(); Hewan objek2 = new Hewan(); objek2.makan(); } }
Pada tumpuan di atas terdapat dua buah class yaitu class Hewan dan Harimau. Kedua class mempunyai method yang sama yaitu makan(). Karena method tersebut yaitu method static maka tidak sanggup di override. Sehingga ketika objek dari class Harimau dibentuk dengan variael referensi dari class Hewan, method makan() yang dipanggil yaitu method milik class Hewan atau super class.
Method overloading juga yaitu bab penggalan dari static binding.
Perbedaan Antara Dynamic Dan Static Binding
Berikut ini yaitu perbedaan antara dynamic dan static binding yang perlu untuk diketahui.Dynamic | Static |
---|---|
Terjadi ketika runtime | Terjadi ketika compile time |
Objek kasatmata dipakai untuk binding | Objek kasatmata tidak dipakai untuk binding |
Method selain private, static simpulan mengatakan dynamic binding alasannya yaitu tidak sanggup di override | Method private, static simpulan tidak sanggup di override, sehingga termasuk static binding |
Method overriding termasuk dynamic binding | Method overloading termasuk static binding |
Belum ada Komentar untuk "Memahami Dynamic Dan Static Binding Pada Kegiatan Java"
Posting Komentar