| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Last revision
Both sides next revision
|
java:super_operator [2021/03/05 19:02] gthanos [Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super] |
java:super_operator [2022/03/11 05:25] gthanos [Πρόσβαση στα πεδία της γονικής κλάσης] |
| |
| ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super ===== | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super ===== |
| | |
| | ==== Πρόσβαση στις μεθόδους της γονικής κλάσης ==== |
| |
| Ξαναγράφουμε τις κλάσεις ''BasicRectangle'' και ''Rectangle'', προσθέτοντας αυτή τη φορά τον ορισμό της μεθόδου ''public String toString()'' και στις δύο. Η μέθοδος αυτή, όπως έχουμε δει, είναι υπαρκτή σε όλα τα αντικείμενα διότι περιέχεται στην κλάση [[https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html|java.lang.Object]]. | Ξαναγράφουμε τις κλάσεις ''BasicRectangle'' και ''Rectangle'', προσθέτοντας αυτή τη φορά τον ορισμό της μεθόδου ''public String toString()'' και στις δύο. Η μέθοδος αυτή, όπως έχουμε δει, είναι υπαρκτή σε όλα τα αντικείμενα διότι περιέχεται στην κλάση [[https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html|java.lang.Object]]. |
| } | } |
| | |
| public int getPerimeter() { | public int area() { |
| return 2*(width+height); | return width*height; |
| } | } |
| } | } |
| </code> | </code> |
| |
| Παρατηρήστε ότι η μέθοδος toString για την κλάση Rectangle χρησιμοποιεί τη μέθοδο toString της κλάσης Point και της γονικής της κλάσης BasicRectangle (βλέπε ''super.toString()''). Ο λόγος που σε αυτό το σημείο είναι απαραίτητη η χρήση του τελεστή super, είναι ότι εάν δεν βάλουμε τη λέξη super πριν από την κλήση της toString() η συνάρτηση δεν θα καλέσει τη συνάρτηση toString της γονικής κλάσης, αλλά τον εαυτό της. Σε αυτή την περίπτωση, η αναδρομική κλήση είναι ατέρμονη, μοιραία θα οδηγήσει σε υπέρβαση της διαθέσιμης στοίβας εκτέλεσης του προγράμματος, με συνέπεια τον τερματισμό του. | Παρατηρήστε ότι η μέθοδος toString για την κλάση Rectangle χρησιμοποιεί τη μέθοδο toString της κλάσης ''Point'' και της γονικής της κλάσης ''BasicRectangle'' (βλέπε ''super.toString()''). Ο λόγος που σε αυτό το σημείο είναι απαραίτητη η χρήση του τελεστή **super**, είναι ότι εάν δεν βάλουμε τη λέξη **super.** κατά την κλήση της toString(), η συνάρτηση δεν θα καλέσει τη συνάρτηση toString της γονικής κλάσης, αλλά τον εαυτό της. Σε αυτή την περίπτωση, η αναδρομική κλήση είναι ατέρμονη, μοιραία θα οδηγήσει σε υπέρβαση της διαθέσιμης στοίβας εκτέλεσης του προγράμματος, με συνέπεια τον τερματισμό του. |
| |
| Επιπλέον, στην κλάση Rectangle, ορίζουμε τη μέθοδο getPerimeter. H μέθοδος μπορεί να γραφεί με τις εξής δύο (2) ισοδύναμες παραλλαγές. | ==== Πρόσβαση στα πεδία της γονικής κλάσης ==== |
| <code> | |
| | Επιπλέον, στην κλάση Rectangle, ορίσαμε παραπάνω τη μέθοδο area. H μέθοδος μπορεί να γραφεί με τις εξής τρεις (3) ισοδύναμες παραλλαγές. |
| | <code java> |
| | public int getPerimeter() { |
| | return width * height; |
| | } |
| | </code> |
| | <code java> |
| public int getPerimeter() { | public int getPerimeter() { |
| return 2*(this.width+this.height); | return this.width * this.height; |
| } | } |
| </code> | </code> |
| <code> | <code java> |
| public int getPerimeter() { | public int getPerimeter() { |
| return 2*(super.width+super.height); | return super.width * super.height; |
| } | } |
| </code> | </code> |
| |
| Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο width επειδή κληρονομείται από τη γονική κλάση ανήκει τόσο στην τρέχουσα κλάση Rectangle, όσο και στη γονικής BasicRectangle. | Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο width, που κληρονομείται από τη γονική κλάση, ανήκει τόσο στην τρέχουσα κλάση ''Rectangle'', όσο και στη γονική της ''BasicRectangle''. |
| |
| Συμπερασματικά, ο τελεστής **super** δείχνει στο τμήμα του τρέχοντος αντικειμένου που αφορά τη γονική κλάση και χρησιμοποιείται για να προσπελαστούν πεδία ή μέθοδοι που ανήκουν σε αυτό. | Συμπερασματικά, ο τελεστής **super** δείχνει στο τμήμα του τρέχοντος αντικειμένου που αφορά τη γονική κλάση και χρησιμοποιείται για να προσπελαστούν πεδία ή μέθοδοι που ανήκουν σε αυτό. |