Compréhension des Méthodes défaut dans une interface
Résolu/Fermé
A voir également:
- Compréhension des Méthodes défaut dans une interface
- Windows 11 clic droit afficher plus d'options par défaut - Guide
- Common interface 5v only - Forum TV & Vidéo
- Installation module CI sur TV samsung UE40JU6400. - Forum TNT / Satellite / Réception
- Interface netflix - Accueil - Streaming
- Google page d'accueil par défaut - Guide
3 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
11 juil. 2020 à 22:49
11 juil. 2020 à 22:49
Bonjour,
Pour pouvoir t'aider convenablement il faudrait que l'on ait le code complet.
Or ici il nous manque l'interface Reproduction (dont hérite Mitose et Pondre) et surtout la classe principale avec la méthode main pour savoir quel code tu exécutes.
Le code que tu dis attendre correspond aux méthodes "reproduire" et celles que tu dis avoir correspond aux méthodes "description" qui ne sont a priori pas appelées l'une par l'autre.
Pour bien comprendre les méthodes par défaut il faudrait peut-être un autre exemple :
Lors de l'implémentation de l'interface, seule la méthode size() devra être redéfinie, la méthode isEmpty() pouvant - par défaut - être calculée à partir de la méthode size().
Toutefois, les classes d'implémentations peuvent - si besoin - redéfinir la méthode isEmpty() quand même, mais ce n'est pas obligatoire sauf si on a une hiérarchie d'héritage en diamant (comme avec ta classe Alien qui implémente à la fois Mitose et Pondre, héritant toutes les deux de la même interface), dans ce cas il est obligatoire de redéfinir la méthode par défaut pour ne pas avoir plusieurs implémentations différentes de la même méthode.
Pour pouvoir t'aider convenablement il faudrait que l'on ait le code complet.
Or ici il nous manque l'interface Reproduction (dont hérite Mitose et Pondre) et surtout la classe principale avec la méthode main pour savoir quel code tu exécutes.
Le code que tu dis attendre correspond aux méthodes "reproduire" et celles que tu dis avoir correspond aux méthodes "description" qui ne sont a priori pas appelées l'une par l'autre.
Pour bien comprendre les méthodes par défaut il faudrait peut-être un autre exemple :
public interface List { int size(); default boolean isEmpty(){ return size() == 0; } }
Lors de l'implémentation de l'interface, seule la méthode size() devra être redéfinie, la méthode isEmpty() pouvant - par défaut - être calculée à partir de la méthode size().
Toutefois, les classes d'implémentations peuvent - si besoin - redéfinir la méthode isEmpty() quand même, mais ce n'est pas obligatoire sauf si on a une hiérarchie d'héritage en diamant (comme avec ta classe Alien qui implémente à la fois Mitose et Pondre, héritant toutes les deux de la même interface), dans ce cas il est obligatoire de redéfinir la méthode par défaut pour ne pas avoir plusieurs implémentations différentes de la même méthode.
Bonjour KX,
Merci pour ton aide,
Oui, désolé j'ai oublié de rajouter ces deux classes.
Dans la classe Reproduction j'ai:
Et dans ma classe main j'ai cela:
Dans le cours que je suis, ils disent (si je comprends bien leurs observations) que dans la classe Alien on fait appel au deux interfaces filles (Pondre et Mitose) et que le résultat devrait ce qui est codé dans la partie reproduction de la classe Alien à savoir:
et ainsi reprendre la partie default des interfaces Pondre et Mitose.
Merci pour votre aide.
Merci pour ton aide,
Oui, désolé j'ai oublié de rajouter ces deux classes.
Dans la classe Reproduction j'ai:
public interface Reproduction {
public static void description(){
System.out.println("Méthode statique dans une interface");
}
}
Et dans ma classe main j'ai cela:
public class Main {
public static void main(String[] args) {
Reproduction.description();
Pondre.description();
Mitose.description();
}
}
Dans le cours que je suis, ils disent (si je comprends bien leurs observations) que dans la classe Alien on fait appel au deux interfaces filles (Pondre et Mitose) et que le résultat devrait ce qui est codé dans la partie reproduction de la classe Alien à savoir:
System.out.println("Je suis un alien et :");
Pondre.super.reproduire();
Mitose.super.reproduire();
et ainsi reprendre la partie default des interfaces Pondre et Mitose.
Merci pour votre aide.
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié le 12 juil. 2020 à 09:06
Modifié le 12 juil. 2020 à 09:06
La méthode main que tu as recopiée appelle uniquement les méthodes description() de Reproduction, Pondre et Mitose, mais jamais aucune méthode reproduire() n'est appelée, ce qui serait de toute façon impossible sans créer au préalable un objet Alien.
Essayes ce code :
Essayes ce code :
public class Main { public static void main(String[] args) { Alien alien = new Alien(); alien.reproduire(); } }