


Mengapakah subkelas melaporkan ralat semasa memanggil kaedah terlebih beban?
Di Java, subkelas adalah perkara biasa untuk melaporkan ralat semasa memanggil kaedah terlebih muatan. Overloading merujuk kepada situasi di mana berbilang kaedah dengan nama yang sama ditakrifkan dalam kelas tetapi dengan senarai parameter yang berbeza. Jika subkelas ingin memanggil kaedah terlebih beban dalam kelas induk, ralat penyusunan kadangkala berlaku. Seterusnya, saya akan menggunakan contoh kod khusus untuk menggambarkan sebab mengapa subkelas melaporkan ralat apabila memanggil kaedah terlebih beban.
Katakan kita mempunyai kelas induk ParentClass, yang mentakrifkan dua kaedah terlebih beban:
public class ParentClass { public void printInfo(String str) { System.out.println("Printing String: " + str); } public void printInfo(int num) { System.out.println("Printing Integer: " + num); } }
Seterusnya, kita mencipta subkelas ChildClass dan cuba memanggil kaedah terlebih beban dalam kelas induk:
public class ChildClass extends ParentClass { public void printInfo(double val) { System.out.println("Printing Double: " + val); } public static void main(String[] args) { ChildClass child = new ChildClass(); child.printInfo("Hello"); // 这行代码会报错 } }
Dalam kod di atas, Subkelas ChildClass kelas induk ParentClass dan mentakrifkan kaedah terbeban baru printInfo(double val). Dalam kaedah utama, kami mencipta anak contoh ChildClass dan cuba memanggil kaedah printInfo(String str) dalam kelas induk.
Namun, apabila kami cuba menyusun kod di atas, kami akan menerima ralat kompilasi berikut:
Error: method printInfo in class ParentClass cannot be applied to given types; required: int found: java.lang.String
Sebab ralat ini ialah apabila Java memanggil kaedah, ia menentukan kaedah khusus untuk dipanggil berdasarkan nombor dan jenis parameter yang dilalui. Dalam kes ini, subkelas ChildClass cuba memanggil kaedah printInfo(String str) dalam kelas induk, tetapi memandangkan kaedah ini tidak terlebih beban dalam subkelas, pengkompil akan mencari kaedah padanan terbaik dan mendapati bahawa hanya printInfo(int num) kaedah Panggilan boleh diselesaikan, tetapi printInfo(String str) tidak dapat ditemui.
Untuk menyelesaikan masalah ini, kita boleh mengatasi kaedah terlebih beban dalam kelas induk dalam subkelas, atau secara eksplisit memanggil kaedah terlebih beban dalam kelas induk. Contohnya:
public class ChildClass extends ParentClass { @Override public void printInfo(String str) { System.out.println("Overriding method in ChildClass: " + str); } public void callParentMethod(String str) { super.printInfo(str); // 显式调用父类中被重载的方法 } public static void main(String[] args) { ChildClass child = new ChildClass(); child.printInfo("Hello"); // 调用子类中重写的方法 child.callParentMethod("World"); // 显式调用父类中的重载方法 } }
Dengan mengatasi kaedah dalam kelas induk atau secara eksplisit memanggil kaedah kelas induk, kita boleh mengelakkan ralat apabila subkelas memanggil kaedah terlebih muatan. Dengan cara ini, anda boleh memahami dengan lebih baik sebab subkelas melaporkan ralat semasa memanggil kaedah terlampau beban, dan mempelajari cara menyelesaikan masalah tersebut.
Atas ialah kandungan terperinci Mengapakah subkelas melaporkan ralat semasa memanggil kaedah terlebih beban?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam pewarisan fungsi, gunakan "penunjuk kelas asas" dan "penunjuk kelas terbitan" untuk memahami mekanisme pewarisan: apabila penuding kelas asas menghala ke objek kelas terbitan, transformasi ke atas dilakukan dan hanya ahli kelas asas diakses. Apabila penuding kelas terbitan menghala ke objek kelas asas, hantaran ke bawah dilakukan (tidak selamat) dan mesti digunakan dengan berhati-hati.

Notepad++ sendiri tidak boleh menjalankan program bahasa C dan memerlukan pengkompil luaran untuk menyusun dan melaksanakan kod. Untuk menggunakan pengkompil luaran, anda boleh menyediakannya seperti berikut: 1. Muat turun dan pasang pengkompil bahasa C 2. Cipta alat tersuai dalam Notepad++ dan konfigurasikan laluan dan parameter fail boleh laku pengkompil; atur cara dan simpan dengan sambungan fail .c 4. Pilih fail program bahasa C dan pilih alat tersuai dari menu "Jalankan" untuk menyusun 5. Lihat hasil kompilasi dan keluarkan ralat kompilasi atau mesej kejayaan. Jika kompilasi berjaya, fail boleh laku akan dihasilkan.

Kekunci pintasan untuk menjalankan kod Python dalam Teks Sublime ialah: Windows dan Linux: Ctrl + B Mac: Cmd + B Letakkan kursor dalam kod. Tekan kekunci pintasan. Kod akan dijalankan menggunakan penterjemah Python lalai sistem.

Kata kunci val dalam Java digunakan untuk mengisytiharkan pembolehubah tempatan yang tidak berubah, iaitu nilainya tidak boleh diubah setelah ditetapkan. Ciri-cirinya ialah: Kebolehubahan: Setelah dimulakan, pembolehubah val tidak boleh ditugaskan semula. Skop setempat: pembolehubah val hanya boleh dilihat dalam blok kod di mana ia diisytiharkan. Jenis inferens: Pengkompil Java akan membuat kesimpulan jenis pembolehubah val berdasarkan ungkapan yang diberikan. Pembolehubah tempatan sahaja: val hanya boleh digunakan untuk mengisytiharkan pembolehubah tempatan, bukan medan kelas atau parameter kaedah.

Pengubah suai const menunjukkan pemalar dan nilai tidak boleh diubah suai statik menunjukkan jangka hayat dan skop pembolehubah. Ahli data yang diubah suai oleh const tidak boleh diubah suai selepas pemulaan Pembolehubah yang diubah suai oleh statik dimulakan apabila atur cara dimulakan dan dimusnahkan apabila atur cara itu akan wujud walaupun tiada objek aktif dan boleh diakses merentas fungsi. Pembolehubah tempatan yang diubah suai oleh const mesti dimulakan apabila diisytiharkan, manakala pembolehubah tempatan yang diubah suai oleh statik boleh dimulakan kemudian. Pembolehubah ahli kelas yang diubah suai const mesti dimulakan dalam senarai pembina atau permulaan, manakala pembolehubah ahli kelas yang diubah suai statik boleh dimulakan di luar kelas.

Operator "=" dalam bahasa pengaturcaraan Java digunakan untuk menetapkan nilai kepada pembolehubah, menyimpan nilai di sebelah kanan ungkapan dalam pembolehubah di sebelah kiri. Penggunaan: pembolehubah = ungkapan, dengan pembolehubah ialah nama pembolehubah yang menerima tugasan, dan ungkapan ialah segmen kod yang mengira atau mengembalikan nilai.

Untuk mengehadkan parameter jenis dalam kaedah generik Java, gunakan sintaks dengan Bound ialah jenis atau antara muka. Oleh itu, parameter hanya menerima jenis yang mewarisi daripada Bound atau melaksanakan antara muka Bound. Sebagai contoh, hadkan T kepada jenis yang setanding dengan dirinya sendiri.

Cara pengkompil membezakan antara fungsi terlampau beban: dengan tandatangannya, iaitu jenis setiap hujah fungsi. Walaupun nama fungsi dan bilangan parameter adalah sama, pengkompil boleh memberitahu perbezaan asalkan jenis parameter berbeza.
