java Une classe étend la classe B, et de remplacement des méthodes
public class A {
protected ClassX a;
public void foo() {
operations on a;
}
}
public class B extends A {
private ClassY b; //ClassY extends ClassX
@Override
public void foo() {
//wanna the exact same operation as A.foo(), but on b;
}
}
Désolé pour ces pas un titre clair.
Ma question est: dans la classe B, quand je l'appelle foo(), et je veux exactement le même fonctionnement en classe A sur un. Comment puis-je obtenir que et sans dupliquer le même code?
Si je quitte foo() de la classe B, serait-il travailler?
Ou ce qui se passe quand je l'appelle super.foo() foo();
Do you mean that my class hierarchy is not well defined?
Alex, j'ai supprimé ma réponse. Je n'ai pas lu la question clairement. Veuillez ne pas tenir compte.OriginalL'auteur xiaofan2406 | 2012-05-18
Vous devez vous connecter pour publier un commentaire.
Depuis ClassY s'étend ClassX, alors vous pouvez supprimer
private ClassY b
de la classe B. Ensuite, vous pouvez simplement mettre votre instance de ClassX à laa
variable d'instance. Cela permetfoo()
à être héréditaire dans la classe B, mais toujours utiliser la même logique et la variable d'instance.b
.Fixe.
Vous êtes en supposant que
ClassY
est unClassX
...L'OP a dit qu'il était.
qui lit les commentaires! 😛
OriginalL'auteur Jeremy
Il sonne comme
ClassX
etClassY
aurait une interface commune (si ils ont les mêmes méthodes que vous voulez appeler sur chacun, au moins). Avez-vous envisagé de fairefoo()
prendre un objet du type de l'interface commune?Vous êtes correct. C'est quelque chose que je n'ai pas vu dans la question d'origine. De toute façon, il se trouve encore que ce serait une solution valable.
OriginalL'auteur nicholas.hauschild
Ne définissent pas le foo() dans B si vous voulez la même opération que celle en A. Si vous souhaitez un autre mode de fonctionnement, remplacer les foo() la méthode de B. Si vous souhaitez étendre les foo() méthode B de telle sorte qu'il ne se l'opération dans Un puis dans B, puis d'appeler super.foo() en haut de la méthode; si vous voulez l'opération dans Un à venir après celui de B, puis d'appeler super.foo() à la fin de la méthode foo().
OriginalL'auteur redcurry
Vous pouvez faire
super.foo()
à l'intérieur de votre surdéfini méthode.Assurez-vous, lorsque vous appelez super, il s'exécute en premier la méthode de votre super-classe, dans ce cas, la classe d'Une méthode foo.
OriginalL'auteur Tulio F.