java:super_operator
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:super_operator [2021/03/05 17:11] – [Ο τελεστής super] gthanos | java:super_operator [2025/03/21 07:05] (current) – [Πρόσβαση στις μεθόδους της γονικής κλάσης] gthanos | ||
---|---|---|---|
Line 5: | Line 5: | ||
===== Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή super ===== | ===== Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή super ===== | ||
- | Λαμβάνοντας κώδικα από το προηγούμενο παράδειγμα του ποδηλάτου έχουμε | + | Επαναλαμβάνοντας |
- | <code java Bicycle.java> | + | <code java BasicRectangle.java> |
- | public | + | class BasicRectangle |
- | + | ||
- | private int frameSize; | + | |
- | private int gearsNumber; | + | |
- | private String color; | + | |
- | + | ||
- | public Bicycle(int frameSize, int gearsNumber, | + | |
- | this.frameSize = frameSize; | + | |
- | this.gearsNumber = gearsNumber; | + | |
- | this.color = color; | + | |
- | } | + | |
| | ||
- | public | + | |
- | return frameSize; | + | int height; |
- | } | + | |
- | + | public | |
- | public | + | width = initWidth; |
- | return gearsNumber; | + | |
- | } | + | } |
- | + | ||
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | public void setColor(String color) { | + | |
- | this.color | + | |
- | } | + | |
- | + | ||
- | public String toString() { | + | |
- | return " | + | |
- | } | + | |
} | } | ||
</ | </ | ||
- | <code java MountainBike.java> | + | Η κλάση Rectangle περιέχει ένα πεδίο τύπου Point. Την κλάση Point μπορείτε να την βρείτε [[java: |
- | public | + | |
+ | <code java Rectangle.java> | ||
+ | class Rectangle | ||
| | ||
- | private boolean suspension; | + | Point origin; |
| | ||
- | | + | |
- | super(frameSize, gearsNumber, | + | super(initWidth, initHeight); |
- | | + | |
- | } | + | } |
- | + | ||
- | public | + | public |
- | return suspension; | + | |
- | | + | |
- | + | } | |
- | public void updateColor(String color) { | + | |
- | // | + | |
- | setColor(color); | + | |
- | | + | |
- | + | ||
- | public String toString() { | + | |
- | String str = ", hasSuspension: | + | |
- | | + | |
- | } | + | |
} | } | ||
</ | </ | ||
- | H χρήση του | + | Ο τελεστής **super** χρησιμοποιείται |
+ | |||
+ | Η κλήση του γονικού κατασκευαστή με χρήση της λέξης super πρέπει να βρίσκεται ως πρώτη εντολή στο σώμα κάθε κατασκευαστή. | ||
==== Σειρά αρχικοποίησης μεταξύ της γονικής και και της απογόνου κλάσης ==== | ==== Σειρά αρχικοποίησης μεταξύ της γονικής και και της απογόνου κλάσης ==== | ||
- | Στις περιπτώσεις που μία κλάση είναι απόγονος άλλης κλάσης η διαδικασία αρχικοποίησης έχει ως εξής. Αρχικά αρχικοποιείται το τμήμα της κλάσης που αφορά την γονική κλάση καλώντας των κατασκευαστή αυτής μέσω του τελεστή **super** και στη συνέχεια αρχικοποιείται η απόγονος κλάση. | + | Στις περιπτώσεις που μία κλάση είναι απόγονος άλλης κλάσης η διαδικασία αρχικοποίησης έχει ως εξής. Αρχικά αρχικοποιείται το τμήμα της κλάσης που αφορά την γονική κλάση καλώντας τον κατασκευαστή αυτής μέσω του τελεστή **super** και στη συνέχεια αρχικοποιείται η απόγονος κλάση. Εάν κατά την κλήση **super** η γονική κλάση έχει με τη σειρά της μία άλλη πρόγονο κλάση, οφείλει να καλέσει τον κατασκευαστή αυτής. Η διαδικασία επαναλαμβάνεται μέχρι να κληθεί ο κατασκευαστής της κλάσης [[https:// |
Εάν δεν υπάρχει κλήση του κατασκευαστή της γονικής κλάσης μέσω του τελεστή **super** στον κατασκευαστή της απογόνου κλάσης, | Εάν δεν υπάρχει κλήση του κατασκευαστή της γονικής κλάσης μέσω του τελεστή **super** στον κατασκευαστή της απογόνου κλάσης, | ||
Line 109: | Line 84: | ||
===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super ===== | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super ===== | ||
- | Στο προηγούμενο παράδειγμα, | + | ==== Πρόσβαση |
- | < | + | |
- | super.color = color; | + | |
- | ή | + | |
- | this.color = color; | + | |
- | </ | + | |
- | διότι το πεδίο color ανήκει τόσο στην | + | |
- | Επιπλέον η μέθοδος toString | + | Ξαναγράφουμε τις κλάσεις '' |
- | <code java Bicycle.java> | + | <code java BasicRectangle.java> |
- | public | + | class BasicRectangle |
- | + | ||
- | private int frameSize; | + | |
- | private int gearsNumber; | + | |
- | protected String color; | + | |
- | + | ||
- | public Bicycle(int frameSize, int gearsNumber, | + | |
- | this.frameSize = frameSize; | + | |
- | this.gearsNumber = gearsNumber; | + | |
- | this.color = color; | + | |
- | } | + | |
| | ||
- | public | + | |
- | return frameSize; | + | int height; |
- | } | + | |
- | + | public | |
- | public | + | width = initWidth; |
- | return gearsNumber; | + | |
- | } | + | } |
- | + | ||
- | | + | public String toString() { |
- | | + | return "width: "+width+", |
- | | + | } |
- | + | ||
- | public void setColor(String color) { | + | |
- | this.color | + | |
- | } | + | |
- | + | ||
- | public String toString() { | + | |
- | return "frame: "+frameSize+", | + | |
- | } | + | |
} | } | ||
</ | </ | ||
- | <code java MountainBike.java> | + | <code java Rectangle.java> |
- | public | + | class Rectangle |
| | ||
- | private boolean suspension; | + | Point origin; |
| | ||
- | | + | |
- | super(frameSize, gearsNumber, | + | super(initWidth, initHeight); |
- | | + | |
- | } | + | } |
- | + | ||
- | public | + | public |
- | return suspension; | + | |
- | | + | |
- | + | } | |
- | public void updateColor(String color) { | + | |
- | super.color = color; | + | public String toString() { |
- | // ή ισοδύναμα | + | |
- | // this.color | + | } |
- | + | ||
- | | + | public int area() { |
- | + | | |
- | public String toString() { | + | |
- | | + | |
- | | + | |
- | } | + | |
} | } | ||
</ | </ | ||
+ | Παρατηρήστε ότι η μέθοδος toString για την κλάση Rectangle χρησιμοποιεί τη μέθοδο toString της κλάσης '' | ||
+ | |||
+ | ==== Πρόσβαση στα πεδία της γονικής κλάσης ==== | ||
+ | |||
+ | Επιπλέον, | ||
+ | <code java> | ||
+ | public int area() { | ||
+ | return width * height; | ||
+ | } | ||
+ | </ | ||
+ | <code java> | ||
+ | public int area() { | ||
+ | return this.width * this.height; | ||
+ | } | ||
+ | </ | ||
+ | <code java> | ||
+ | public int area() { | ||
+ | return super.width * super.height; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ο λόγος που μπορούμε να γράψουμε τη συνάρτηση με τους δύο παραπάνω τρόπους είναι ότι το πεδίο width, που κληρονομείται από τη γονική κλάση, ανήκει τόσο στην τρέχουσα κλάση '' | ||
- | Συμπερασματικά, | + | Συμπερασματικά, |
<WRAP important 80% center round> | <WRAP important 80% center round> |
java/super_operator.1614964303.txt.gz · Last modified: 2021/03/05 17:11 (external edit)