Je suis codant pour interface.
J'ai une interface On me dit que Je pourrais remplacer i graphique que j'ai besoin que j'ai besoin Une méthode qui n'est pas disponible dans pourrait-il m'aider avec comment-pourrait-il-être fait? P> Merci. P> A a = new C();
a.Z(); //can't do this
6 Réponses :
Donc, selon ce que vous venez d'écrire, vous ne pouvez pas toucher A, B, ni c ... donc, étendre c avec d? p>
Ensuite, vous pouvez ajouter les méthodes dont vous avez besoin / souhaitez. P>
Je ne peux pas toucher que a code> ou b code>. J'ai créé C code> car je devais remplacer certaines des méthodes implémentées dans B code>. La chose est que je codir pour interface à l'aide d'une variable de référence de type A code> mais la classe d'implémentation de A code> pourrait être B code> ou C code> ou d mais je dois avoir cette nouvelle méthode que je souhaite utiliser déclarée dans code> A` pour A's code> variable de référence à utiliser pour appeler ça méthode.
Votre question n'est pas claire du tout. Est-ce que c'est ce que vous voulez dire ou ce que vous voulez?
public interface InterfaceA
{
}
public class ClassB implements InterfaceA
{
}
public class ClassC extends ClassB
{
}
public class ClassD extends ClassC
{
}
public class Main
{
protected InterfaceA A;
public Main()
{
//A = new ClassB();
A = new ClassD();
}
public static void main(String[]args)
{
}
}
Je ne peux pas toucher que a code> ou b code>. J'ai créé C code> car je devais remplacer certaines des méthodes implémentées dans B code>. La chose est que je codir pour interface à l'aide d'une variable de référence de type A code> mais la classe d'implémentation de A code> pourrait être B code> ou C code> ou d mais je dois avoir cette nouvelle méthode que je souhaite utiliser déclarée dans code> A` pour A's code> variable de référence à utiliser pour appeler ça méthode.
Si la méthode est favorable, vous n'avez pas besoin de l'ajouter à une interface pour la mettre en œuvre. S'il est utilisé ailleurs, alors b implémente une autre interface d. P>
Toute la question ici est codant pour interface A code>. À l'avant du client, j'utilise une variable de référence d'une méthode d'appel.
Je pense que je suis. Vous avez une variable qui est de type A. Vous savez que c'est un B et que vous devez appeler une méthode qui n'est pas dans l'interface d'une. Vous devez soit référence directement au lieu de référencer la généralisation A une tentative d'essayer de lancer à B et de manipuler les erreurs de coulée
Je pense que je comprends ce que vous voulez. Vous avez ce qui suit: Si c'est ce que vous voulez, alors j'ai peur que cela ne puisse être fait. Toute personne travaillant avec Notez que dans l'extremis, vous pouvez vérifier le type de classe d'instances de mais c'est vraiment laid em> et casse bon nombre des règles cardinales de la programmation OO. P> P> A code> connaît uniquement les méthodes définies dans A code>; Ils ne sauront pas que vous avez défini somenewmethod () code> dans votre classe c code>. Vous devez être autorisé à changer A code>. P> A p>: p>
Je ne sais pas si vous êtes autorisé à le faire, mais vous pouvez prolonger des interfaces ainsi que des cours, vous pouvez faire: p>
Interface publique A2 étend un { annulation publique mysupertveryterestingNewmethod (); } p>
Cela pourrait être fait, mais la tâche est la demande de travail sur plusieurs instances de A code> qu'il ne peut pas être imaginé pour remplacer toutes les instances de A code> par A2 code>. Il n'y avait aucune autre option, donc je devais déclarer la méthode dans l'interface A code> elle-même. Merci pour la réponse:).
Eclipse a une option de refacteur si vous CTRL + Cliquez sur Option. Ce n'est pas si dur! @sauter
Ceci pourrait résoudre votre problème: selon votre exigence p> 1-vous avez créé une interface A. p> 2-créé une classe B qui implémente un. p> 3-3 a créé une classe C qui s'étend B et des implements a. p> 4- a = nouveau c () créera une variable de référence du type Une mais au moment de l'exécution, il tiendra l'objet de c. P> car vous ne pouvez pas toucher B et C, les signatures sont identiques et que vous appelez x () et y () et y () à partir d'un objet de c comme s'étend b. p> par conséquent, vous avez remplacé B avec C sans implémenter x et y dans C et apporter des modifications à b. p> sortie: p> Something X
Something Y
Êtes-vous peut-être moyen: toucher ni A ni b b>
plus: pourquoi ne pouvez-vous pas avoir une méthode qui n'est pas dans l'interface? Ce n'est pas Objective-C!
Oui, je sais que c'est possible à Objc, mais c'est plus courant là-bas.
Vous ne pouvez pas toucher A, B, B ou C et doit remplacer B avec la mise en œuvre de A? Ceci est impossible à moins que vous ne puissiez altérer c ou étendre C à d et remplacer B avec votre nouvelle implémentation de D. Vous ne pouvez pas ajouter une nouvelle méthode en dehors de l'interface A et s'attendre à ce qu'il soit utilisé par les consommateurs par défaut d'une interface d'une interface.
Ok, mais qu'est-ce que tu voulais en réalité?
«Je pense que j'ai besoin d'une méthode qui n'est pas disponible dans A, donc j'ai besoin d'ajouter une méthode à laquelle je pourrais implémenter dans C.» - Qu'avez-vous voulu dire ici? Vous avez d'abord dit que vous avez besoin d'une méthode de non-A. Ensuite, vous dites que vous devez ajouter cette méthode à un !!
Vous écrivez la classe
C code> non? Alors quel est le problème?Peut-être que vous avez besoin de b ou c comme des classes abstraites? Ensuite, vous n'avez pas besoin de mettre en œuvre toutes les méthodes d'une classe abstraite. Est-ce que c'est ce que tu veux?
@Silverback: Ouais, bonne question. Si c a toutes les méthodes d'un, il peut être utilisé
@Teryone: Je suis désolé pour la réponse différée. J'ai édité la question de la rendre plus claire. J'utilise Java.
@ 11684: Oui, je n'ai pas pu toucher non plus
a code> ouB code>, alors je devais écrire une classeC code> et l'étendre à partir deB code> Pour remplacer certaines des méthodes implémentées dansB code>, mais je pensais que j'avais besoin d'une nouvelle méthode et parce que je dois coder à l'interface, j'ai besoin d'avoir cette méthode dansa < / Code> Ainsi que j'utilise la variable de référence code> de code> à appeler les méthodes et la variable de référence code> A code> ne reflétera aucune méthode nouvellement ajoutée juste àC code >.Ah, suppose que tu es sur des terrains au-delà de moi! @sauter
@skip Lorsque vous modifiez la question, veuillez modifier le texte entier et laisser une question qui a du sens seul. Ajouter des modifications à la fin n'atteint pas beaucoup les lecteurs.
@ 11684: J'ai effectué une dernière modification avec un exemple de tentative d'expliquer le problème que je tente de résoudre, au cas où il est possible de le faire grâce.