Maison > Java > javaDidacticiel > le corps du texte

Pourquoi une sous-classe signale-t-elle une erreur lors de l'appel d'une méthode surchargée ?

王林
Libérer: 2024-03-08 17:33:03
original
572 Les gens l'ont consulté

Pourquoi une sous-classe signale-t-elle une erreur lors de lappel dune méthode surchargée ?

En Java, il est très courant que les sous-classes signalent des erreurs lors de l'appel de méthodes surchargées. La surcharge fait référence à la situation dans laquelle plusieurs méthodes portant le même nom sont définies dans une classe mais avec des listes de paramètres différentes. Si une sous-classe souhaite appeler une méthode surchargée dans la classe parent, des erreurs de compilation se produisent parfois. Ensuite, j'utiliserai des exemples de code spécifiques pour illustrer les raisons pour lesquelles les sous-classes signalent des erreurs lors de l'appel de méthodes surchargées.

Supposons que nous ayons une classe parent ParentClass, qui définit deux méthodes surchargées :

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);
    }
}
Copier après la connexion

Ensuite, nous créons une sous-classe ChildClass et essayons d'appeler la méthode surchargée dans la classe parent :

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"); // 这行代码会报错
    }
}
Copier après la connexion

Dans le code ci-dessus, la sous-classe ChildClass hérite la classe parent ParentClass et définit une nouvelle méthode surchargée printInfo(double val). Dans la méthode principale, nous créons une instance enfant de ChildClass et essayons d'appeler la méthode printInfo(String str) dans la classe parent.

Cependant, lorsque nous essayons de compiler le code ci-dessus, nous recevrons l'erreur de compilation suivante :

Error: method printInfo in class ParentClass cannot be applied to given types;
required: int
found: java.lang.String
Copier après la connexion

La raison de cette erreur est que lorsque Java appelle une méthode, il détermine la méthode spécifique à appeler en fonction du numéro et type de paramètres transmis. Dans ce cas, la sous-classe ChildClass essaie d'appeler la méthode printInfo(String str) dans la classe parent, mais comme cette méthode n'est pas surchargée dans la sous-classe, le compilateur recherchera la meilleure méthode correspondante et constatera que seule la méthode printInfo(int num) L'appel peut être terminé, mais printInfo(String str) est introuvable.

Afin de résoudre ce problème, nous pouvons remplacer la méthode surchargée dans la classe parent dans la sous-classe, ou appeler explicitement la méthode surchargée dans la classe parent. Par exemple :

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"); // 显式调用父类中的重载方法
    }
}
Copier après la connexion

En remplaçant les méthodes de la classe parent ou en appelant explicitement les méthodes de la classe parent, nous pouvons éviter les erreurs lorsque les sous-classes appellent des méthodes surchargées. De cette façon, vous pouvez mieux comprendre les raisons pour lesquelles les sous-classes signalent des erreurs lors de l'appel de méthodes surchargées et apprendre à résoudre ces problèmes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal