This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
java:this_operator [2015/01/21 17:44] gthanos created |
java:this_operator [2015/01/22 09:08] gthanos [Πρόσβαση των κατασκευαστών της κλάσης] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Ο τελεστής this ===== | ===== Ο τελεστής this ===== | ||
- | Ας υποθέσουμε τον παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα | + | ==== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this ==== |
+ | |||
+ | Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα | ||
+ | |||
+ | <code java> | ||
+ | public class Rectangle { | ||
+ | private int width, height; | ||
+ | private Point origin; | ||
+ | |||
+ | public Rectangle(Point p, int w, int h) { | ||
+ | origin = p; | ||
+ | width = w; | ||
+ | height = h; | ||
+ | } | ||
+ | |||
+ | public Rectangle(int x, int y) { | ||
+ | width = w; | ||
+ | height = h; | ||
+ | } | ||
+ | .... | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ως εξής | ||
+ | |||
+ | <code java> | ||
+ | public class Rectangle { | ||
+ | private int width, height; | ||
+ | private Point origin; | ||
+ | |||
+ | public Rectangle(Point p, int w, int h) { | ||
+ | origin = p; | ||
+ | this(w,h) | ||
+ | } | ||
+ | |||
+ | public Rectangle(int w, int h) { | ||
+ | width = w; | ||
+ | height = h; | ||
+ | } | ||
+ | .... | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Ο τελεστής **this** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστεί ένας άλλος κατασκευαστής της ίδιας κλάσης. | ||
+ | |||
+ | ==== Πρόσβαση πεδίων και μεθόδων των αντικειμένων της κλάσης ==== | ||
+ | |||
+ | Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα: | ||
<code java> | <code java> | ||
Line 28: | Line 75: | ||
public Rectangle(Point origin, int width, int height) { | public Rectangle(Point origin, int width, int height) { | ||
- | origin = this.origin; | + | this.origin = origin; |
- | width = this.width; | + | this.width = width; |
- | height = this.height; | + | this.height = height; |
} | } | ||
... | ... | ||
Line 36: | Line 83: | ||
</code> | </code> | ||
+ | Στον παραπάνω κώδικα η τοπική μεταβλητή ''origin'' που δίνεται ως τυπική παράμετρος στον κατασκευαστή, συμπίπτει με την μεταβλητή της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή "κρύβει" (shadows) την μεταβλητή του αντικειμένου της κλάσης. Προκειμένου να έχουμε πρόσβαση στην μεταβλητή του αντικειμένου της κλάσης θα πρέπει να χρησιμοποιήσουμε τον τελεστή **this**. | ||
+ | |||
+ | Συμπερασματικά, ο τελεστής **this** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστούν δεδομένα ή μεταβλητές που ανήκουν σε αντικείμενα της κλάσης. | ||
+ | |||
+ | <WRAP tip> | ||
+ | O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, για λογαριασμό του οποίου εκτελείται. | ||
+ | </WRAP> | ||
===== Ο τελεστής super ===== | ===== Ο τελεστής super ===== | ||
+ | |||
+ | Σε αναλογία με τον τελεστή **this**, ο τελεστής **super** δείχνει στο αντικείμενο της γονικής κλάσης. Προϋπόθεση για την χρήση του τελεστή **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 χρησιμοποιείται για να προσπελάσει τον κατασκευαστή της γονικής κλάσης και να αρχικοποιήσει τις μεταβλητές που ανήκουν στην κλάση αυτή. | ||