This shows you the differences between two versions of the page.
| — |
java:super_keyword [2016/02/26 11:15] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Ο τελεστής super ====== | ||
| + | Σε αναλογία με τον τελεστή **this**, ο τελεστής **super** δείχνει στο αντικείμενο της γονικής κλάσης. Προϋπόθεση για την χρήση του τελεστή **super** είναι να υφίσταται γονική κλάση μέσω της διαδικασίας της κληρονομικότητας. | ||
| + | |||
| + | ===== Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή super ===== | ||
| + | |||
| + | Λαμβάνοντας κώδικα από το προηγούμενο παράδειγμα του ποδηλάτου έχουμε τα εξής: | ||
| + | |||
| + | <code java Bicycle.java> | ||
| + | public class Bicycle { | ||
| + | |||
| + | // the Bicycle class has | ||
| + | // three fields | ||
| + | public int cadence; | ||
| + | public int gear; | ||
| + | public int speed; | ||
| + | |||
| + | // the Bicycle class has | ||
| + | // one constructor | ||
| + | public Bicycle(int startCadence, int startSpeed, int startGear) { | ||
| + | gear = startGear; | ||
| + | cadence = startCadence; | ||
| + | speed = startSpeed; | ||
| + | } | ||
| + | |||
| + | // the Bicycle class has | ||
| + | // four methods | ||
| + | public void setCadence(int newValue) { | ||
| + | cadence = newValue; | ||
| + | } | ||
| + | |||
| + | public void setGear(int newValue) { | ||
| + | gear = newValue; | ||
| + | } | ||
| + | |||
| + | public void applyBrake(int decrement) { | ||
| + | speed -= decrement; | ||
| + | } | ||
| + | |||
| + | public void speedUp(int increment) { | ||
| + | speed += increment; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </code> | ||
| + | |||
| + | <code java MountainBike.java> | ||
| + | public class MountainBike extends Bicycle { | ||
| + | |||
| + | // the MountainBike subclass has | ||
| + | // one field | ||
| + | public int seatHeight; | ||
| + | |||
| + | // the MountainBike subclass has | ||
| + | // one constructor | ||
| + | public MountainBike(int startHeight, int startCadence, | ||
| + | int startSpeed, int startGear) { | ||
| + | super(startCadence, startSpeed, startGear); | ||
| + | seatHeight = startHeight; | ||
| + | } | ||
| + | |||
| + | // the MountainBike subclass has | ||
| + | // one method | ||
| + | public void setHeight(int newValue) { | ||
| + | seatHeight = newValue; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </code> | ||
| + | |||
| + | H χρήση του τελεστή super χρησιμοποιείται για να προσπελάσει τον κατασκευαστή της γονικής κλάσης και να αρχικοποιήσει τις μεταβλητές που ανήκουν στην κλάση αυτή. | ||
| + | |||
| + | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super ===== | ||
| + | |||
| + | Ο κατασκευαστής της κλάσης ''MountainBike'' θα μπορούσε να γραφεί ως εξής. | ||
| + | |||
| + | <code java MountainBike.java> | ||
| + | public class MountainBike extends Bicycle { | ||
| + | |||
| + | // the MountainBike subclass has | ||
| + | // one field | ||
| + | public int seatHeight; | ||
| + | |||
| + | // the MountainBike subclass has | ||
| + | // one constructor | ||
| + | public MountainBike(int startHeight, int startCadence, | ||
| + | int startSpeed, int startGear) { | ||
| + | super(startCadence, startSpeed, startGear); | ||
| + | super.cadence = startCadence; | ||
| + | super.speed = startSpeed; | ||
| + | super.gear = startGear; | ||
| + | seatHeight = startHeight; | ||
| + | } | ||
| + | |||
| + | // the MountainBike subclass has | ||
| + | // one method | ||
| + | public void setHeight(int newValue) { | ||
| + | seatHeight = newValue; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Συμπερασματικά, ο τελεστής **super** δείχνει στο αντικείμενο της γονικής κλάσης και χρησιμοποιείται για να προσπελαστούν δεδομένα ή μεταβλητές που ανήκουν στο τμήμα του τρέχοντος αντικειμένου που αφορά την γονική κλάση. | ||
| + | |||
| + | <WRAP important>Απαραίτητη προϋποθεση για την χρήση του τελεστη **super** είναι τα παιδιά της γονικής κλάσης να έχουν πρόσβαση στα δεδομένα ή τις μεθόδους της γονικής κλάσης. Για να γίνει αυτό, τα πεδία και οι μέθοδοι της γονικής κλάσης που θέλουμε να προσπελάσουμε δεν θα πρέπει να έχουν των προσδιοριστή πρόσβασης **private**. Περισσότερα για τους προσδιοριστές πρόσβασης θα δούμε παρακάτω, όταν θα έχουμε εξήγήσει την φιλοσοφία των πακέτων στην γλώσσα JAVA. | ||
| + | </WRAP> | ||