Je suis confus en ce qui concerne un concept en héritage multiple. J'ai trois classes A, B et C.
Class A {
// ...
}
Class B extends A {
// ...
}
Class C extends B {
// ...
}
Je sais que c'est une mauvaise pratique de plusieursl'héritage et je lis aussi que java permet l'héritage multiple à travers les interfaces. Mais je ne reçois aucune erreur dans le code ci-dessus. S'il vous plaît quelqu'un peut-il m'expliquer avec un exemple clair sans utiliser d'interface. Merci!!
Réponses:
2 pour la réponse № 1Ce n'est pas un héritage multiple. Chaque classe a exactement une super classe directe. Si votre exemple était considéré comme un héritage multiple, vous ne pourriez pas utiliser le extends
mot-clé du tout, puisque chaque classe étend déjà par défaut le Object
classe.
Le multi-héritage serait
class C extends A,B {}
Et c’est illégal en Java.
2 pour la réponse № 2
Votre code ne contient pas d'héritage multiple et constitue en fait une syntaxe légale Java. L'héritage multiple fait référence à un cas où une classe directement étend deux superclasses. Par exemple:
public class MyClass extends MyFather, MyMother {
}
Notez qu'il s'agit bien sûr d'une syntaxe Java illégale.
2 pour la réponse № 3
"L'héritage multiple" en Java signifie essentiellement l'héritage de plusieurs interfaces, pas l'héritage de plusieurs implémentations.
Maintenant, il existe une nouvelle fonctionnalité de Java 8 qui vous permet de faire quelque chose comme l'héritage multiple d'implémentations réelles, via des interfaces et quelque chose appelé méthodes par défaut. Je vous encourage fortement à maîtriser les bases de Java avant de les essayer. Une fois que vous êtes prêt, voici un bon tutoriel sur les méthodes par défaut.
1 pour la réponse № 4
Le code que vous avez écrit ci-dessus est un exemple de multiniveau héritage Pas d'héritage multiple.
L'héritage multiple est comme:
class A extends B,C {
//this code is not valid in JAVA
}
Et si vous souhaitez utiliser des interfaces pour implémenter une structure telle que l'héritage multiple, vous pouvez utiliser:
interface test_interface1{
/*all the methods declared here in this interface should be the part
** of the class which is implementing this current interface
*/
}
De même :
interface test_interface2{
}
Donc, créez une classe TestClass comme:
class TestClass implements test_interface1,test_interface2 {
//now you have to use each and every method(s) declared in both the interfaces
// i.e. test_interface1 & test_interface2
}
Vous pouvez également utiliser une syntaxe telle que:
class TestClass extends AnyClass implements test_interface1,test_interface2 {
/* but do keep in mind - use extends keyword before implements
** and now you know you cannot use more than 1 class names with extends keyword
** in java.
*/