java:this_operator

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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:09]
gthanos [Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή this]
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** δείχνει στο τρέχον αντικείμενο και χρησιμοποιείται για να προσπελαστεί ένας άλλος κατασκευαστής της ίδιας κλάσης. 
 + 
 +==== Πρόσβαση σε πεδία και ​μεθόδους των αντικειμένων της κλάσης μέσω ​του τελεστή 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** είναι να υφίσταται γονική κλάση μέσω της διαδικασίας της κληρονομικότητας. ​
 +
 +==== Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή 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 ====
 +
  
  
java/this_operator.txt · Last modified: 2017/02/16 11:24 by gthanos