J'ai une question sur l'interface et la classe d'implémentation d'interface.
Ceci est mon code: P>
((cMyClass)i).iMethod2();
3 Réponses :
Oui, cela fonctionnera (si vous modifiez la déclaration de Cependant, c'est une idée généralement mauvaise. L'ensemble de l'utilisation d'une interface est de pouvoir fonctionner avec toute mise en œuvre em> - il doit séparer l'abstraction de la mise en œuvre. Si vous voulez alors avoir besoin d'une implémentation spécifique, vous pouvez aussi bien faire le type de Supposons que vous appelle vous-même le constructeur (sur une note distincte, il est judicieux de commencer à suivre les conventions de nommage Java, qui indiquent que les classes et les interfaces devraient être pascalées - dediter le cmyclass code> pour implémenter
imyInterface code>) et c'est sûr tant que la référence est vraiment em > Reportez-vous à une instance de
cmyclass code>. p>
i code> juste
cmyclass code> pour commencer par. P>
CMYClass CODE> CMLYCLASS, vous recevez un paramètre de méthode de type
imyInterface code> - c'est une mauvaise idée de se lancer vers
CMYClass code > À ce stade, comme cela pourrait être un Différent em> implémentation de l'interface. P>
C code> et
i Code> Préfixes.) P>
Je pense que, s'il va se lancer, il devrait vérifier la distribution avec instance de code>, pour être du bon côté de la sécurité.
@ S.L.Barth: Sauf si le mode de défaillance souhaité est une parfaiteCastException de toute façon, bien sûr, auquel cas une fonte inconditionnelle va bien.
@Jon Skeet merci, je l'utilise maintenant, y compris la méthode2 dans l'interface. Désolé j'ai oublié d'ajouter implémente imyinterface b> dans mon échantillon.
Il fonctionnera (à condition que CMLYClass implémente imyinterface et que vous êtes dans la portée du modificateur em> protégé), mais ce n'est pas le bon approche OO. p>
Si vous souhaitez utiliser Iméthod2 considérer: p>
cmyclass myClass = nouveau cmyclass (); code> li>
ul>
Merci, j'ajoute la méthode2 dans mon interface.
Il y a une autre alternative à l'interface de distribution à une classe. Voici l'exemple comment.
public class Main { public static void main(String[] args) { cMyClass myClass = new cMyClass(); myClass.getMyInterface().iMethod1(); myClass.iMethod2(); } }