Héritage d'interface avec collisions de noms de méthodes
Lorsque plusieurs interfaces définissent des méthodes avec des noms et des signatures identiques et sont implémentées par une seule classe, le compilateur identifie la méthode remplacée en considérant le suivant :
Compatibilité :
Si les méthodes des interfaces sont équivalentes aux méthodes (ayant des types de retour et des types de paramètres compatibles), alors une seule méthode est héritée. Dans ce cas, le compilateur n'a pas besoin de différencier à quelle interface appartient la méthode.
Exemple :
Considérez le code suivant :
interface A { int f(); } interface B { int f(); } class Test implements A, B { // Only one @Override annotation required @Override public int f() { // Method implementation here return 0; } }
Dans ce scénario, la méthode f dans Test est considérée comme une implémentation à la fois pour A.f et B.f.
Incompatibilité :
Si les méthodes dans les interfaces ne sont pas équivalentes aux méthodes (ayant des types de retour ou des types de paramètres incompatibles), alors le compilateur émettra une erreur de compilation .
Exemple :
Dans le code suivant, le f La méthode dans Test entraînera une erreur de compilation car les types de retour dans A.f et B.f sont différents :
interface A { void f(); } interface B { int f(); } class Test implements A, B { @Override public int f() { // Method implementation here return 0; } }
Conséquences :
Tant que les méthodes héritées Si plusieurs interfaces sont compatibles, il n'est pas nécessaire de distinguer quelle méthode appartient à quelle interface. Le compilateur les traite comme une méthode unique implémentée par la classe.
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!