Maison >Java >javaDidacticiel >Pourquoi Java ne peut-il pas avoir d'héritage multiple ?
L'héritage multiple signifie qu'une sous-classe peut hériter de plusieurs classes parents en même temps, ayant ainsi les caractéristiques de plusieurs classes parents en même temps, mais les inconvénients sont importants.
1. Si la classe parent héritée par une sous-classe a la même variable membre, la sous-classe ne pourra pas déterminer quelle variable membre de la classe parent utiliser lors du référencement de la variable .
Par exemple :
public class classA // 父类 classA { private int num = 0; } public class classB // 父类 classB { private int num = 1; } public class classC extends classA,classB // 子类 classC 继承于 classA 和 classB { public static void main(String [] args) { classC obj = new classC(); obj.print(); // 调用父类成员变量 num , 那 num 等于 0 还是 1 ? } public void print() { System.out.println(super.num); } }
2. Si plusieurs classes parents héritées par une sous-classe ont la même méthode et que la sous-classe ne remplace pas la méthode (si elle est couverte, alors Si vous utilisez directement cette méthode dans la sous-classe), vous ne pourrez pas déterminer quelle méthode de classe parent appeler lors de l'appel de cette méthode.
Par exemple :
public class classA // 父类 classA { public void fun() { System.out.print("hello"); } } public class classB // 父类 classB { public void fun() { System.out.print("hello"); } } public class classC extends classA,classB { public static void main(String [] args) { classC t = new classC(); t.print(); } public void print() { super.fun(); // 调用父类中 fun 方法,但由于classA、classB都有fun()方法,将无法确定使用 // 哪个父类中的方法 } }
Par conséquent, Java n'autorise qu'un seul héritage, c'est-à-dire qu'une sous-classe ne peut hériter que d'une seule classe parent. Mais afin d'étendre les fonctionnalités des sous-classes, Java utilise des interfaces pour surmonter les inconvénients liés à la non-utilisation de l'héritage multiple.
L'interface est une classe abstraite spéciale.Les variables membres de l'interface sont par défaut des types finaux statiques, c'est-à-dire des constantes, et les méthodes de l'interface sont abstraites et n'ont pas de corps de méthode.
Une méthode spécifique ne peut être implémentée que par la classe qui implémente l'interface. Lors de l'appel, seule la méthode de la classe implémentante sera toujours appelée (il n'y a pas d'ambiguïté), il n'y a donc pas de deuxième inconvénient du multiple. héritage ; et à cause de l'interface Il n'y a que des constantes statiques, mais comme les variables statiques déterminent la relation d'appel au moment de la compilation, même s'il y a un certain conflit, une erreur sera générée lors de la compilation lors du référencement des variables statiques ; nom de classe ou nom d'interface directement pour éviter toute ambiguïté, donc le premier inconvénient de l'héritage multiple n'existe pas non plus. Ces inconvénients n'existent pas non plus lorsqu'une interface hérite de plusieurs interfaces parents.
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!