Rumah Java javaTutorial Mengapakah subkelas melaporkan ralat semasa memanggil kaedah terlebih beban?

Mengapakah subkelas melaporkan ralat semasa memanggil kaedah terlebih beban?

Mar 08, 2024 pm 05:33 PM
Ralat kompilasi

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);
    }
}
Salin selepas log masuk

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"); // 这行代码会报错
    }
}
Salin selepas log masuk

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
Salin selepas log masuk

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"); // 显式调用父类中的重载方法
    }
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan? Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan? May 01, 2024 pm 10:27 PM

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.

Bagaimana untuk menjalankan bahasa C dalam notepad++ Bagaimana untuk menjalankan bahasa C dalam notepad++ Apr 08, 2024 am 10:06 AM

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 mana yang perlu ditekan semasa menjalankan kod python secara sublime Kekunci mana yang perlu ditekan semasa menjalankan kod python secara sublime Apr 03, 2024 pm 03:54 PM

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.

Apakah maksud val dalam java Apakah maksud val dalam java Apr 25, 2024 pm 10:06 PM

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.

Perbezaan antara const dan statik dalam c++ Perbezaan antara const dan statik dalam c++ May 01, 2024 am 10:54 AM

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.

Apakah maksud = dalam java Apakah maksud = dalam java Apr 26, 2024 pm 11:30 PM

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.

Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java? Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java? Apr 30, 2024 pm 01:30 PM

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.

Bagaimanakah pengkompil membezakan antara parameter dengan gaya yang sama tetapi jenis yang berbeza dalam mekanisme kelebihan beban fungsi Java? Bagaimanakah pengkompil membezakan antara parameter dengan gaya yang sama tetapi jenis yang berbeza dalam mekanisme kelebihan beban fungsi Java? Apr 25, 2024 am 10:03 AM

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.

See all articles