Differences
This shows you the differences between two versions of the page.
| Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
java:super_operator [2021/03/05 19:07] gthanos |
java:super_operator [2022/03/11 05:25] (current) gthanos [Πρόσβαση στα πεδία της γονικής κλάσης] |
| } | } |
| | |
| 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) ισοδύναμες παραλλαγές. | Επιπλέον, στην κλάση Rectangle, ορίσαμε παραπάνω τη μέθοδο area. H μέθοδος μπορεί να γραφεί με τις εξής τρεις (3) ισοδύναμες παραλλαγές. |
| <code> | <code java> |
| public int getPerimeter() { | public int area() { |
| return 2*(this.width+this.height); | return width * height; |
| } | } |
| </code> | </code> |
| <code> | <code java> |
| public int getPerimeter() { | public int area() { |
| return 2*(super.width+super.height); | return this.width * this.height; |
| | } |
| | </code> |
| | <code java> |
| | public int area() { |
| | return super.width * super.height; |
| } | } |
| </code> | </code> |