This shows you the differences between two versions of the page.
java:equals [2017/03/01 15:18] doufexi created |
java:equals [2017/03/01 15:30] (current) doufexi [Η μέθοδος equals] |
||
---|---|---|---|
Line 65: | Line 65: | ||
| | ||
Δεν είναι πάντα απαραίτητο να συγκρίνουμε όλα τα πεδία ένα προς ένα, αλλά μόνο αυτά που θεωρούμε ότι ισότητα μεταξύ τους σημαίνει ισότητα ανάμεσα στα δύο αντικείμενα. Επίσης, αν κάποια πεδία δεν είναι βασικοί τύποι όπως στο παράδειγμα, τότε θα πρέπει να χρησιμοποιήσουμε equals για τη σύγκριση. Δείτε το παράδειγμα εργαστηρίου με την κλάση Deck, όπου τα πεδία είναι τύπου String και τα συγκρίνουμε με equals. | Δεν είναι πάντα απαραίτητο να συγκρίνουμε όλα τα πεδία ένα προς ένα, αλλά μόνο αυτά που θεωρούμε ότι ισότητα μεταξύ τους σημαίνει ισότητα ανάμεσα στα δύο αντικείμενα. Επίσης, αν κάποια πεδία δεν είναι βασικοί τύποι όπως στο παράδειγμα, τότε θα πρέπει να χρησιμοποιήσουμε equals για τη σύγκριση. Δείτε το παράδειγμα εργαστηρίου με την κλάση Deck, όπου τα πεδία είναι τύπου String και τα συγκρίνουμε με equals. | ||
+ | |||
+ | ===== Ο χαρακτηρισμός @Override ===== | ||
+ | |||
+ | Κάθε αντικείμενο που ορίζουμε στη Java είναι τελικά και τύπου Object. Για να είμαστε πιο ακριβείς, κάθε κλάση που ορίζουμε είναι απόγονος της βασικής κλάσης Object. Περισσότερες λεπτομέρειες θα δούμε στην ενότητα για την κληρονομικότητα. | ||
+ | |||
+ | Στην κλάση Object ορίζονται κάποιες μέθοδοι που ισχύουν για όλους τους απογόνους. Ανάμεσα σε αυτές είναι η equals και η [[ :java:toString | toString ]]. Η default λειτουργία της equals είναι να κάνει απλή σύγκριση με ==. Η default λειτουργία της toString είναι να επιστρέφει ένα ειδικό string που χαρακτηρίζει το αντικείμενο. | ||
+ | |||
+ | Αν δεν επαναπροσδιορίσουμε τις υλοποιήσεις αυτών των μεθόδων για τη δική μας κλάση, τότε όποτε τις χρησιμοποιούμε θα εκτελείται ο "default" κώδικας. Αλλά όπως είδαμε ακριβώς πριν, μπορούμε να γράψουμε τι δική μας υλοποίηση της equals για κάθε δική μας κλάση. Όταν κάνουμε κάτι τέτοιο, συνηθίζεται να βάζουμε πριν την υλοποίηση το χαρακτηρισμό @Override ο οποίος "ενημερώνει" τον compiler ότι η παρακάτω μέθοδος υπερισχύει της αντίστοιχης default μεθόδου. Η χρήση του @Override έχει το πλεονέκτημα ότι αν κάνουμε κάποιο λάθος στις παραμέτρους ή στο όνομα ή στον τύπο επιστροφής της μεθόδου, ο compiler θα μας ενημερώσει (θα ανιχνεύσει ότι αυτό που γράφουμε δεν αντιστοιχεί σε κάποια από τις μεθόδους της Object). | ||