User Tools

Site Tools


java:super_operator

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:super_operator [2021/03/05 19:02] – [Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super] gthanosjava:super_operator [2022/03/11 05:25] (current) – [Πρόσβαση στα πεδία της γονικής κλάσης] gthanos
Line 83: Line 83:
  
 ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή 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]].
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) ισοδύναμες παραλλαγές. +==== Πρόσβαση στα πεδία της γονικής κλάσης ==== 
-<code>  + 
-  public int getPerimeter() { +Επιπλέον, στην κλάση Rectangle, ορίσαμε παραπάνω τη μέθοδο area. H μέθοδος μπορεί να γραφεί με τις εξής τρεις (3) ισοδύναμες παραλλαγές. 
-    return 2*(this.width+this.height);+<code java>  
 +  public int area() { 
 +    return width height; 
 +  } 
 +</code> 
 +<code java>  
 +  public int area() { 
 +    return this.width this.height;
   }   }
 </code> </code>
-<code>  +<code java>  
-  public int getPerimeter() { +  public int area() { 
-    return 2*(super.width+super.height);+    return super.width super.height;
   }   }
 </code> </code>
  
-Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο width επειδή κληρονομείται από τη γονική κλάση ανήκει τόσο στην τρέχουσα κλάση Rectangle, όσο και στη γονικής BasicRectangle.+Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο widthπου κληρονομείται από τη γονική κλάσηανήκει τόσο στην τρέχουσα κλάση ''Rectangle'', όσο και στη γονική της ''BasicRectangle''.
  
 Συμπερασματικά, ο τελεστής **super** δείχνει στο τμήμα του τρέχοντος αντικειμένου που αφορά τη γονική κλάση και χρησιμοποιείται για να προσπελαστούν πεδία ή μέθοδοι που ανήκουν σε αυτό.  Συμπερασματικά, ο τελεστής **super** δείχνει στο τμήμα του τρέχοντος αντικειμένου που αφορά τη γονική κλάση και χρησιμοποιείται για να προσπελαστούν πεδία ή μέθοδοι που ανήκουν σε αυτό. 
java/super_operator.1614970973.txt.gz · Last modified: 2021/03/05 19:02 (external edit)