JAVA: problèmes Interfaces

Résolu
betty555 Messages postés 38 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 6 juillet 2010 - 5 juin 2009 à 09:27
betty555 Messages postés 38 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 6 juillet 2010 - 5 juin 2009 à 10:17
Bonjour,

J'ai une interfaceA ou j'ai déclaré une méthode M1 qui retourne une interfaceB (Implémentée par ClasseB), La méthode M1 est appelée dans une classeC. Est ce que c'est possible d'avoir le retour de la méthode M1  comme classe qui implémente l'interfaceB?
final ClasseB classB = classA.M1();

Parceque j'ai une erreur quand je mets en retour classA au lieu d'avoir interfaceB.
Puisque j'ai ClasseB qui implémente InterfaceB, et ClasseA qui implémente InterfaceA je croyais que c'etait possible...

Merci pour votre aide,

3 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 juin 2009 à 09:42
Salut,

Je ne sais pas si j'ai bien tout compris, je m'embrouille un peu avec tes classes A, B et C, ton truc marche, mais il faut caster le type concret de retour :

public interface InterfaceA {
public InterfaceB getB();
}

public interface InterfaceB {
}

class ClasseA implements InterfaceA {
public InterfaceB getB() {
return new ClasseB();
}
}

class ClasseB implements InterfaceB {
}


ClasseA a = new ClasseA();
ClasseB b = a.getB(); // erreur de type !
InterfaceB b = a.getB(); // OK

Solution :
ClasseB b = (ClasseB) a.getB(); // OK
3
betty555 Messages postés 38 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 6 juillet 2010
5 juin 2009 à 10:12
Merci beaucoup, par contre quand il s'agit d'un set...Il faut que je mette en paramètre une interface...

public interface InterfaceA {

    public void setB(InterfaceB interfaceb);

}

public interface InterfaceB {

}

class ClasseA implements InterfaceA {

    public void setB(final InterfaceB interfaceb) {

       this.interfaceB=interfaceb
    }

}

class ClasseB implements InterfaceB {

}


a.setB(ClasseB b); // Erreur..
0
betty555 Messages postés 38 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 6 juillet 2010
5 juin 2009 à 10:17
c'est ok je crois en mettant,

final ClasseB b;

a.setB(ClasseB b); // Erreur..
a.setB((InterfaceB) b); // Ok..
0
Rejoignez-nous