Maison > Java > javaDidacticiel > le corps du texte

Pourquoi Java ne prend-il pas en charge l'héritage multiple ?

王林
Libérer: 2023-05-13 10:04:14
avant
941 Les gens l'ont consulté

Tout d'abord, pensez à ce scénario. Si la classe A hérite désormais de la classe B et de la classe C, et que la méthode test() existe à la fois dans la classe B et dans la classe C, alors lorsque l'objet de classe A appelle la méthode test() méthode, devrions-nous appeler test() de la classe B ? Ou qu'en est-il de test() de la classe C ? Il n'y a pas de réponse, donc l'héritage multiple n'est pas autorisé en Java.

Cependant, les interfaces en Java peuvent être héritées de plusieurs manières, telles que :

public interface A {
    void test();
}
public interface B {
    void test();
}
public interface C extends A, B{
}
Copier après la connexion

Pourquoi les interfaces peuvent-elles être héritées ?

Parce que A, B et C sont toutes des interfaces, même si la méthode de test est définie dans les deux interfaces A et B, car l'interface seule déclare la méthode , Là n'est pas une véritable méthode d'implémentation, ce ne sera donc pas un problème pour l'interface C, elle hérite simplement de la déclaration de la même méthode test(), qui est requise lors de son utilisation. de l'interface C peut implémenter cette méthode test().

public class C1 implements C{
    public void test() {
        System.out.println("hello Hoeller");
    }
}
Copier après la connexion

Alors il n'y a pas une méthode par défaut dans l'interface ? Ne pouvons-nous pas également implémenter des méthodes dans les interfaces ?

Testons-le directement :

public interface A {
    default void test() {
        System.out.println("a");
    }
}
public interface B {
    default void test() {
        System.out.println("b");
    }
}
public interface C extends A, B{
}
Copier après la connexion
À ce moment, l'interface C compilera et signalera une erreur. Le message d'erreur est :

#. 🎜🎜#com.hoeller .C hérite des valeurs par défaut non liées pour test() des types com.hoeller.A et com.hoeller.B

Peu importe qu'il soit traduit ou non , il signale juste une erreur de toute façon, indiquant que l'interface C ne peut pas être utilisée simultanément. Héritez de la méthode par défaut test() dans les deux interfaces.

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:yisu.com
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