Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

2 réponses
Avatar
CyrilleRabut
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.

2 réponses

Avatar
Yliur
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.
Avatar
David Larochette
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.