Rumah >Java >javaTutorial >Perbezaan antara pengikatan awal dan pengikatan lewat di Jawa
Dalam pengaturcaraan berorientasikan objek, pegawai merujuk kepada kaedah yang menghubungkan panggilan strategi kepada pelaksanaannya. Java ialah bahasa pengaturcaraan berorientasikan objek yang menyokong kuasa awal dan kuasa lewat, masing-masing dikenali sebagai kuasa tidak aktif dan kuasa aktif. Kedua-dua bentuk pengikatan mempunyai kelebihan dan aplikasi. Dalam artikel ini kami akan memperkenalkan sintaks, penjelasan dan perbezaan antara pengikatan awal dan pengikatan lewat di Jawa.
Sintaks pengikatan awal dalam Java adalah seperti berikut.
<ClassName> <objectName> = new <ClassName>();
Sintaks pengikatan lewat dalam Java adalah seperti berikut.
<ClassName> <objectName> = new <DerivedClassName>();
Jenis kelas ditentukan pada masa penyusunan dengan pengikatan awal, dan pelaksanaan kaedah dipilih berdasarkan jenis objek yang ditentukan. Ini bermakna pengkompil mengetahui kelas khusus objek dan boleh mengikat panggilan kaedah terus kepada pelaksanaan kaedah.
Pengikatan lewat, sebaliknya, menentukan jenis kelas pada masa jalan dan memilih pelaksanaan kaedah berdasarkan jenis objek sebenar. Ini menunjukkan bahawa pengkompil tidak mengetahui kelas tepat objek dan mesti bergantung pada persekitaran masa jalan untuk mencari pelaksanaan kaedah yang betul.
Dalam pengikatan awal, panggilan kaedah diselesaikan pada masa penyusunan. Mari kita pertimbangkan algoritma pengikatan awal berikut -
Isytiharkan kelas bernama Shape dan gunakan kaedah bernama draw().
Buat subkelas bernama Bulatan untuk melanjutkan kelas Bentuk.
Laksanakan kaedah cabutan() dalam kelas Bulatan.
Gunakan pengikatan awal untuk mencipta objek kelas Bulatan.
Panggil kaedah draw() objek.
class Shape { public void draw() { System.out.println("Drawing a shape"); } } class Circle extends Shape { @Override public void draw() { System.out.println("Drawing a circle"); } } public class Main { public static void main(String[] args) { Shape shape = new Circle(); shape.draw(); } }
Drawing a circle
Kami mempunyai kelas Shape dengan fungsi draw() yang mencetak "draw shape" dalam kod ini. Kami juga mempunyai kelas Bulatan yang memanjangkan kelas Shape dan mengatasi fungsi draw() untuk mengeluarkan "lukis bulatan". Dalam kelas Utama, kami mencipta objek kelas Bulatan menggunakan pengikatan awal dengan mengisytiharkannya sebagai jenis Bentuk. Apabila kita memanggil fungsi draw() objek bentuk, hasilnya akan menjadi "lukis bulatan". Ini kerana panggilan kaedah terikat dengan pelaksanaan kelas Bulatan pada masa binaan.
Dalam pengikatan lewat, panggilan kaedah diselesaikan pada masa jalan. Mari kita pertimbangkan algoritma pengikatan lewat berikut -
Isytiharkan kelas yang dipanggil Haiwan dan gunakan kaedah yang dipanggil makeSound().
Buat dua subkelas bernama Anjing dan Kucing untuk melanjutkan kelas Haiwan.
Laksanakan kaedah makeSound() dalam kelas Anjing dan Kucing.
Gunakan pengikatan lewat untuk mencipta objek kelas Anjing.
Panggil kaedah makeSound() objek.
class Animal { public void makeSound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog barks"); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal animal = new Dog(); animal.makeSound(); } }
Dog barks
Dalam kod ini, kami mempunyai kelas Haiwan, yang mempunyai kaedah makeSound() yang mencetak "Haiwan mendapat bunyi". Kami juga mempunyai dua subkelas, Anjing dan Kucing, yang memanjangkan kelas Haiwan dan mengatasi kaedah makeSound() untuk mencetak "Salak anjing" dan "Kucing meow" masing-masing. Dalam kelas Utama, kami mencipta objek kelas Anjing menggunakan pengikatan lewat dan mengisytiharkannya sebagai jenis Haiwan. Apabila kita memanggil kaedah makeSound() pada objek haiwan, output akan menjadi "Salak anjing". Ini kerana panggilan kaedah terikat kepada pelaksanaan kelas Dog pada masa jalan berdasarkan jenis objek sebenar.
PERBEZAAN |
IKAT AWAL |
kemudian mengikat |
---|---|---|
ANALISIS MASA |
Masa kompilasi |
runtime |
Pelaksanaan kaedah |
Ditentukan berdasarkan jenis pengisytiharan objek |
Ditentukan berdasarkan jenis objek sebenar |
fleksibiliti |
Fleksibiliti pelaksanaan kaedah yang berubah secara dinamik adalah terhad |
Memberi fleksibiliti melalui penghantaran kaedah dinamik dan polimorfisme |
Prestasi |
Prestasi lebih pantas kerana panggilan kaedah dihuraikan pada masa penyusunan |
Memandangkan panggilan kaedah dihuraikan pada masa jalan, prestasi menjadi perlahan sedikit |
Pengisytiharan objek |
Pengisytiharan objek menggunakan jenis kelas |
Pengisytiharan objek menggunakan jenis kelas terbitan |
Ikatan awal dan pengikatan lewat ialah dua konsep penting dalam Java, yang menentukan cara panggilan kaedah dihuraikan. Pengikatan lewat menyelesaikan panggilan kaedah berdasarkan jenis objek sebenar semasa masa jalan, manakala kaedah pautan pengikatan awal memanggil pelaksanaannya pada masa penyusunan. Setiap kaedah mempunyai kelebihan dan kegunaan tersendiri. Walaupun pengikatan awal memberikan prestasi yang lebih baik kerana panggilan kaedah diselesaikan pada masa penyusunan, ia tidak membenarkan perubahan dinamik pada pelaksanaan kaedah. Pengikatan lewat, sebaliknya, membolehkan penghantaran kaedah dinamik, membolehkan polimorfisme dan fleksibiliti dalam penyembahan kaedah. Memahami perbezaan antara pengikatan awal dan pengikatan lewat adalah penting untuk menulis program Java yang cekap dan fleksibel.
Atas ialah kandungan terperinci Perbezaan antara pengikatan awal dan pengikatan lewat di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!