@override annotation
Quelqu'un peut me dire si ce code:
public class OvTester {
@Override
public int hashCode() {
return toString().hashCode();
}
}
détermine que le toString
méthode dans le OvTester
classe remplace la toString
méthode dans sa super-classe.
Je voudrais savoir si cela est vrai, et si oui, comment cela fonctionne?
Si ce n'est pas vrai, alors, est-ce vrai:
"la hashCode()
méthode dans OvTester
doit l'emporter sur le même nom de méthode dans sa super-classe"
?
Si ce n'est pas correcte, alors ce qui est correct?
Votre classe ne semble pas avoir une super-classe, donc ce serait un échec.
bien sûr, il a une super-classe -
bien sûr, il a une super-classe -
java.lang.Object
OriginalL'auteur f1wade | 2011-08-23
Vous devez vous connecter pour publier un commentaire.
La redéfinition de méthode qui se passe quand vous redéfinir une méthode avec la même signature dans une sous-classe.
Donc, ici, vous écrasez
hashCode()
, pastoString()
La
@Override
annotation est facultatif (mais une très bonne chose) et indique que cela devrait être primordial. Si vous orthographiez mal quelque chose ou avoir un mal de type de paramètre, le compilateur vous avertira.Donc oui, le 2ème affirmation est vraie (et la super-classe dans ce cas est
java.lang.Object
)OriginalL'auteur Bozho
Non, ce n'est pas exactement vrai.
La
@Overrides
annotation dit que "cette méthode remplace la méthode avec le même nom dans la classe super".Dans ce cas, le
hashCode
deOvTester
remplace lahashCode
dansObject
.Oui. C'est exactement la façon dont il fonctionne.
Quand une méthode ne rien faire d'autre que d'appeler une autre méthode (presque ce que vous avez dans votre exemple), il est généralement considéré comme un délégué méthode. C'est peut-être ce que vous êtes confus avec.
OriginalL'auteur aioobe
La
@Override
annotation n'a pas de "déterminer" quoi que ce soit. C'est tout simplement un drapeau qui indique au compilateur de générer une erreur si la méthode annotée n'est pas du remplacement d'une super-classe ou la méthode de l'interface. C'est un outil pour les développeurs pour les aider à maintenir leur santé mentale, et rien de plus.Dans ce cas précis, il est simplement remarquer que la
hashCode()
mise en œuvre dansOvTester
supplante l'hashCode()
méthode définie dansObject
. Cela n'a rien à voir avectoString()
, et l'appel de la superclasse,toString()
méthode de votrehashCode()
méthode ne sera pas/est pas la même chose que primordialtoString()
.Cela est vrai, dans le sens que l'annotation entraîne le compilateur pour générer une erreur si il n'y a pas substituables
hashCode()
méthode de la super-classe qui correspond à la signature de la méthode annotée.OriginalL'auteur aroth
Pas, cela signifie seulement que le hashCode() la méthode est remplacée. Le compilateur de vérifier au moment de la compilation que hashCode() est vraiment une méthode (avec signature) qui est remplacée.
OriginalL'auteur Jems
@Override
est juste au moment de la compilation de vérifier si le responsable de l'implémentation vraiment remplace la méthode.si vous essayez primordial
il ne pourra pas compiler
OriginalL'auteur Jigar Joshi
Ce code remplace le
hashCode()
méthode qui forment la baseObject
classe.Le
toString()
méthode a encore de la mise en œuvre d'origine.Pour remplacer le
toString()
, vous effectuez les opérations suivantes:Tant que la méthode dans la classe fille a le même nom et la même signature que la méthode de la classe parente, ET la méthode dans la classe parent est PAS privé, il sera overidden(indépendamment de la présence de l'annotation
@Override
)OriginalL'auteur gotomanners