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

Mengapakah subkelas melaporkan ralat semasa memanggil kaedah terlebih beban?

王林
王林asal
2024-03-08 17:33:03567semak imbas

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!

Kenyataan:
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