This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:this_operator [2015/01/22 09:20] gthanos [Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super] |
java:this_operator [2015/09/18 13:50] gthanos [Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Oι τελεστές this και super ====== | + | ====== Ο τελεστής this ====== |
- | ===== Ο τελεστής this ===== | + | ===== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this ===== |
- | + | ||
- | ==== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this ==== | + | |
Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα | Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα | ||
Line 48: | Line 46: | ||
Ο τελεστής **this** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστεί ένας άλλος κατασκευαστής της ίδιας κλάσης. | Ο τελεστής **this** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστεί ένας άλλος κατασκευαστής της ίδιας κλάσης. | ||
- | ==== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this ==== | + | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this ===== |
Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα: | Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα: | ||
Line 87: | Line 85: | ||
Συμπερασματικά, ο τελεστής **this** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστούν δεδομένα ή μεταβλητές που ανήκουν σε αντικείμενα της κλάσης. | Συμπερασματικά, ο τελεστής **this** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστούν δεδομένα ή μεταβλητές που ανήκουν σε αντικείμενα της κλάσης. | ||
- | <WRAP tip> | + | <WRAP tip 80% center round> |
O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, για λογαριασμό του οποίου εκτελείται. | O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, για λογαριασμό του οποίου εκτελείται. | ||
</WRAP> | </WRAP> | ||
- | ===== Ο τελεστής super ===== | ||
- | Σε αναλογία με τον τελεστή **this**, ο τελεστής **super** δείχνει στο αντικείμενο της γονικής κλάσης. Προϋπόθεση για την χρήση του τελεστή **super** είναι να υφίσταται γονική κλάση μέσω της διαδικασίας της κληρονομικότητας. | + | |Προηγούμενο: [[:java:objects| Δημιουργώντας Αντικείμενα ]] | Επόμενο: [[:java:static_keyword | Στατικές μεταβλητές και μέθοδοι ]]| |
- | + | ||
- | ==== Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή super ==== | + | |
- | + | ||
- | Λαμβάνοντας κώδικα από το προηγούμενο παράδειγμα του ποδηλάτου έχουμε τα εξής: | + | |
- | + | ||
- | <code 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 ==== | + | |
- | + | ||
- | <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> | + | |
- | + | ||
- | Ο κατασκευαστής της κλάσης ''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> | + | |