User Tools

Site Tools


java:object_class

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:object_class [2021/03/22 07:31] gthanosjava:object_class [2021/03/22 07:36] (current) – external edit 127.0.0.1
Line 29: Line 29:
     * **public final void wait(long timeout)**     * **public final void wait(long timeout)**
     * **public final void wait(long timeout, int nanos)**     * **public final void wait(long timeout, int nanos)**
 +
 +
 +
  
 ===== Έλεγχος ισότητας μεταξύ δύο αντικειμένων ===== ===== Έλεγχος ισότητας μεταξύ δύο αντικειμένων =====
  
-Ας υποθέσουμε ότι έχουμε δύο αντικείμενα της [[java:inheritance|κληρονομούμενης]] κλάσης [[https://courses.e-ce.uth.gr/ECE326/doku.php?do=export_code&id=java:inheritance&codeblock=2|Rectangle]] η οποία με τη σειρά της διαθέτει ένα πεδίο τύπου [[https://courses.e-ce.uth.gr/ECE326/doku.php?do=export_code&id=java:inheritance&codeblock=1|Point]].+Ας υποθέσουμε ότι έχουμε δύο αντικείμενα της [[java:inheritance|κληρονομούμενης κλάσης]]  [[https://courses.e-ce.uth.gr/ECE326/doku.php?do=export_code&id=java:inheritance&codeblock=2|Rectangle]] η οποία με τη σειρά της διαθέτει ένα πεδίο τύπου [[https://courses.e-ce.uth.gr/ECE326/doku.php?do=export_code&id=java:inheritance&codeblock=1|Point]].
  
 Θέλουμε να συγκρίνουμε τα δύο αυτά αντικείμενα μόνο ως προς την ισότητα. Για να το κάνουμε αυτό έχουμε δύο επιλογές: Θέλουμε να συγκρίνουμε τα δύο αυτά αντικείμενα μόνο ως προς την ισότητα. Για να το κάνουμε αυτό έχουμε δύο επιλογές:
   * **χρήση του τελεστή =**: Ο τελεστής = ελέγχει οι δύο μεταβλητές αριστερά και δεξιά του τελεστή δείχνουν στο ίδιο αντικείμενο. Ως εκ τούτου δεν μπορεί να χρησιμοποιηθεί στη συγκεκριμένη περίπτωση.   * **χρήση του τελεστή =**: Ο τελεστής = ελέγχει οι δύο μεταβλητές αριστερά και δεξιά του τελεστή δείχνουν στο ίδιο αντικείμενο. Ως εκ τούτου δεν μπορεί να χρησιμοποιηθεί στη συγκεκριμένη περίπτωση.
-  * **χρήση της μεθόδου equals:** Θα πρέπει να επαναορίσουμε τη μέθοδο equals, ώστε όταν συγκρίνονται δύο αντικείμενα που έχουν τα ίδια πεδία η μέθοδος να επιστρέφει true. Εδώ θα πρέπει να σημειώσουμε ότι εφόσον η κλάση περιέχει και ένα πεδίο τύπου Point, μόνο εάν και τα πεδία τύπου Point των δύο αντικειμένων δείχνουν σε διαφορετικά αντικείμενα που έχουν κοινές τιμές τα δύο αντικείμενα τύπου Rectangle θα είναι ίδια. Η μέθοδος equals των κλάσεων Point και Rectangle δίνονται παρακάτω:+  * **χρήση της μεθόδου equals:** Θα πρέπει να επαναορίσουμε τη μέθοδο equals, ώστε όταν συγκρίνονται δύο αντικείμενα που έχουν τα ίδια πεδία η μέθοδος να επιστρέφει true. Εδώ θα πρέπει να σημειώσουμε ότι εφόσον η κλάση περιέχει και ένα πεδίο τύπου Point, μόνο εάν και τα πεδία τύπου Point των δύο αντικειμένων δείχνουν σε διαφορετικά αντικείμενα που έχουν κοινές τιμές τα δύο αντικείμενα τύπου Rectangle θα είναι ίδια. Ενδεικτικές υλοποιήσεις της μεθόδου equals των κλάσεων Point και Rectangle δίνονται παρακάτω:
  
 <code java> <code java>
Line 69: Line 72:
  
  
-Όμως ο επαναορισμός της μεθόδου equals δεν αρκεί ώστε να σηματοδοτήσει την ισότητα μεταξύ δύο αντικείμενων. [[https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)|Με βάση την τεκμηρίωση της μεθόδου equals]], όταν ορίζουμε τη μέθοδο equals είναι απαραίτητο να ορίσουμε ξανά και τη μέθοδο hashCode, ώστε δύο ίδια αντικείμενα να έχουν και την ίδια επιστρεφόμενη τιμή της συνάρτησης hashCode. Ο επαναορισμός της συνάρτησης hashCode έχει ως εξής:+Όμως ο επαναορισμός της μεθόδου equals δεν αρκεί ώστε να σηματοδοτήσει την ισότητα μεταξύ δύο αντικείμενων. [[https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)|Με βάση την τεκμηρίωση της μεθόδου equals]], όταν επαναορίζουμε τη μέθοδο equals είναι απαραίτητο να ορίσουμε ξανά και τη μέθοδο hashCode, ώστε δύο ίδια αντικείμενα να έχουν και την ίδια επιστρεφόμενη τιμή της συνάρτησης hashCode. Ο επαναορισμός της συνάρτησης hashCode έχει ως εξής (ενδεικτική υλοποίηση):
  
 <code java> <code java>
Line 122: Line 125:
  
 </code> </code>
 +
 +<WRAP tip 80% center round>
 +Βάλτε σε σχόλια τις μεθόδους equals και hashCode στις παραπάνω κλάσεις και ελέγξτε τι εκτυπώνει το παραπάνω πρόγραμμα σε αυτή την περίπτωση.
 +</WRAP>
  
  
 |Προηγούμενο: [[ :java:super_operator | Ο τελεστής super ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:polymorphism | Στατικός και Δυναμικός Πολυμορφισμός ]]| |Προηγούμενο: [[ :java:super_operator | Ο τελεστής super ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:polymorphism | Στατικός και Δυναμικός Πολυμορφισμός ]]|
java/object_class.1616398260.txt.gz · Last modified: 2021/03/22 07:31 by gthanos