Compréhension des Méthodes défaut dans une interface

Le
CyrilleRabut offline Hors ligne
Bonjour,

J'étudie actuellement la programmation Java et je me trouve confronté à un problème.
Je ne comprends pas les Méthodes défaut dans une interface.
J'ai le code suivant:

public interface Mitose extends Reproduction {
public static void description() {
Reproduction.description();
System.out.println("Redéfinie dans Mitose.java");
}

default void reproduire() {
System.out.println("Je me divise !");
}
}

public interface Pondre extends Reproduction {

public static void description() {
Reproduction.description();
System.out.println("Redéfinie dans Pondre.java");
}


default void reproduire() {
System.out.println("Je ponds des oeufs !");
}

}

public class Alien implements Pondre, Mitose {

public void reproduire() {

System.out.println("Je suis un alien et :");
Pondre.super.reproduire();
Mitose.super.reproduire();

}
}

Mais a la place d'avoir le résultat attendu à savoir:

Je suis un alien et :
Je ponds des oeufs !
Je me divise

Je me retrouve avec le résultat suivant:

Méthode statique dans une interface
Méthode statique dans une interface
Redéfinie dans Pondre.java
Méthode statique dans une interface
Redéfinie dans Mitose.java

J'ai la dernière version d'Eclipse et les dernières versions de Java.
J'espère que vous pourrez m'aider.

Merci par avance pour votre aide.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Yliur
Le #26551156
Le Sat, 11 Jul 2020 12:26:54 -0500, CyrilleRabut a écrit :
Bonjour,
J'étudie actuellement la programmation Java et je me trouve confronté à
un problème.
Je ne comprends pas les Méthodes défaut dans une interface.
J'ai le code suivant:
public interface Mitose extends Reproduction {
public static void description() {
Reproduction.description();
System.out.println("Redéfinie dans Mitose.java");
}
[...]
Je me retrouve avec le résultat suivant:
Méthode statique dans une interface Méthode statique dans une interface
Redéfinie dans Pondre.java Méthode statique dans une interface Redéfinie
dans Mitose.java

"static" c'est pour les "méthodes de classe", en quelque sorte de simples
fonctions qui ne sont pas concernées par le polymorphisme.
Il faut sans doute l'enlever des différents endroits où il se trouve dans
ton code, le fonctionnement normal des méthodes c'est sans ce
modificateur.
David Larochette
Le #26551358
Le 11/07/2020 à 19:26, CyrilleRabut a écrit :
Bonjour,
J'étudie actuellement la programmation Java et je me trouve confronté à un
problème.
Je ne comprends pas les Méthodes défaut dans une interface.
J'ai le code suivant:

[…]
Pondre.super.reproduire();
Mitose.super.reproduire();
}
}
Mais a la place d'avoir le résultat attendu à savoir:
Je suis un alien et :
Je ponds des oeufs !
Je me divise
Je me retrouve avec le résultat suivant:
Méthode statique dans une interface
Méthode statique dans une interface
Redéfinie dans Pondre.java
Méthode statique dans une interface
Redéfinie dans Mitose.java

En appelant Pondre.super.reproduire(), tu fais référence à
l'implémentation de reproduire() de l'interface Reproduction (qui est à
la fois le super de Pondre et de Mitose, et qui doit contenir un appel à
description()).
Pour appeler les implémentations de Pondre et de Mitose, tu peux passer
par un cast :
((Pondre)this).reproduire();
((Mitose)this).reproduire();
Ce qui devrait donner le résultat attendu.
Poster une réponse
Anonyme