Maison  >  Article  >  Java  >  Pourquoi Java ne prend-il pas en charge l’héritage multiple ?

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

王林
王林avant
2023-05-13 10:04:14937parcourir

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{
}

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");
    }
}

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{
}

À 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer