java:super_operator

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:super_operator [2021/03/05 19:01]
gthanos
java:super_operator [2022/03/11 05:23]
gthanos [Πρόσβαση στις μεθόδους της γονικής κλάσης]
Line 84: Line 84:
 ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή 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]].
  
 <code java BasicRectangle.java> <code java BasicRectangle.java>
Line 122: Line 124:
   }   }
      
-  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, ορίζουμε παραπάνω τη μέθοδο getPerimeter. H μέθοδος μπορεί να γραφεί με τις εξής δύο (2) ισοδύναμες παραλλαγές. 
-<code> +<code java
   public int getPerimeter() {   public int getPerimeter() {
     return 2*(this.width+this.height);     return 2*(this.width+this.height);
   }   }
 </code> </code>
-<code> +<code java
   public int getPerimeter() {   public int getPerimeter() {
     return 2*(super.width+super.height);     return 2*(super.width+super.height);
Line 142: Line 146:
 </code> </code>
  
-Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο width επειδή κληρονομείται από τη γονική κλάση ανήκει τόσο στην τρέχουσα κλάση Rectangle, όσο και στη γονικής BasicRectangle.+Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο widthπου κληρονομείται από τη γονική κλάσηανήκει τόσο στην τρέχουσα κλάση ''Rectangle'', όσο και στη γονική της ''BasicRectangle''.
  
 Συμπερασματικά, ο τελεστής **super** δείχνει στο τμήμα του τρέχοντος αντικειμένου που αφορά τη γονική κλάση και χρησιμοποιείται για να προσπελαστούν πεδία ή μέθοδοι που ανήκουν σε αυτό.  Συμπερασματικά, ο τελεστής **super** δείχνει στο τμήμα του τρέχοντος αντικειμένου που αφορά τη γονική κλάση και χρησιμοποιείται για να προσπελαστούν πεδία ή μέθοδοι που ανήκουν σε αυτό. 
java/super_operator.txt · Last modified: 2022/03/11 05:25 by gthanos