t3.equals(t3)
est la seule ligne qui a le droit arguments qui correspondent à la signature de la méthode public boolean equals (Test testje)
donc c'est la seule ligne dans le programme qui fait les appels que l'instruction print. Cette question est destinée à vous apprendre quelques petites choses.
- Toute la classe implicitement étendre Objet
- Object.java contient une méthode equals qui prend type d'Objet
- plusieurs méthodes avec le même nom ne peut exister à condition qu'ils aient des arguments différents - ce qui est connu comme la surcharge de méthode
- la méthode de surcharge de la méthode qui est la signature correspond à la arguments au moment de l'exécution est la méthode qui est appelée.
Essentiellement, le truc c'est que le Test implicitement s'étend de l'Objet, comme toutes les classes java ne. Objet contient une méthode equals qui prend type d'Objet. t1 et t2 sont tapés telle qu'au moment de l'exécution, les arguments ne correspondent jamais à la signature de la méthode d'égal à égal qui est définie dans l'Essai. Au lieu de cela il est toujours à l'appel de la méthode equals dans Object.java parce que soit le type de base Est l'Objet dans lequel cas, les seules méthodes que vous avez accès sont celles définies dans Object.java ou le type dérivé est l'Objet auquel cas
public boolean equals(Test testje)
Ne peut pas être saisi, car dans ce cas au moment de l'exécution, l'argument est de type Object qui est une super-classe de Test, pas une sous-classe. Donc, au lieu de cela, il ressemble à la méthode equals dans le Test.java s'implicitement tapé super-classe Object.java qui contient aussi une méthode equals, qui arrive juste pour avoir une signature de la méthode de
public boolean equals (Object o)
dans ce cas, la hauteur de nos arguments lors de l'exécution afin que cette méthode equals est celui qui exécute.
Avis en cas de t3.equals(t3)
à la fois le type de base et le type dérivé de la t3 Test.
Test t3 = new Test ();
cela signifie que lors de l'exécution, vous appelez la méthode equals dans Test.java et l'argument que vous êtes de passage dans est en fait de type de Test afin que les signatures de méthode de match et le code à l'intérieur Test.java exécute. À ce point - count == 4
.
Bonus peu de connaissances pour vous:
@Override
annotation vous peut-être vu dans quelques endroits explicitement indique au compilateur à l'échec si elle ne trouve pas la méthode avec la même signature quelque part dans une super-classe. C'est utile pour savoir si vous avez certainement l'intention de remplacer une méthode et vous voulez être absolument sûr que vous êtes vraiment substitution de la méthode et que vous n'avez pas accidentellement changé la méthode dans la super-classe ou sous-classe, mais pas les deux et Introduit une erreur d'exécution où la mauvaise mise en œuvre de la méthode est appelée à l'origine un comportement indésirable.