java:this_operator

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:this_operator [2016/01/25 09:09]
gthanos [Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this]
java:this_operator [2017/02/16 11:24] (current)
gthanos [Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this]
Line 16: Line 16:
     width = width;     width = width;
     height = height;     height = height;
-    origin = o;+    origin = origin;
   }   }
   ...   ...
Line 22: Line 22:
 </​code>​ </​code>​
  
-Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή "​κρύβει"​ (shadows) την μεταβλητή του αντικειμένου της κλάσης. Προκειμένου να έχουμε πρόσβαση στην μεταβλητή του αντικειμένου της κλάσης θα πρέπει να χρησιμοποιήσουμε τον τελεστή **this**, ως εξής:+Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή ​ή παράμετρος ​"​κρύβει"​ (//shadows//) την μεταβλητή του αντικειμένου της κλάσης. Προκειμένου να έχουμε πρόσβαση στην μεταβλητή του αντικειμένου της κλάσης θα πρέπει να χρησιμοποιήσουμε τον τελεστή **this**, ως εξής:
  
 <code java> <code java>
Line 35: Line 35:
     this.width = width;     this.width = width;
     this.height = height;     this.height = height;
-    this.origin = o;+    this.origin = origin;
   }   }
   ...   ...
Line 45: Line 45:
 ===== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this ===== ===== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this =====
  
-Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα+Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα ​θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή. ​
  
 <code java> <code java>
Line 54: Line 54:
   private Point origin;   private Point origin;
     ​     ​
-  ​// the Rectangle class has one constructor +  public Rectangle(int ​initWidth, int initHeight, Point initOrigin) { 
-  ​public Rectangle(int ​setWidth, int setHeight, Point o) { +    width = initWidth
-    width = setWidth+    height = initHeight
-    height = setHeight+    origin = initOrigin;
-    origin = o;+
   }   }
   ​   ​
-  public Rectangle(int ​setWidth, int setHeight) { +  public Rectangle(int ​initWidth, int initHeight, int xPos, int yPos) { 
-    width = setWidth+    width = initWidth
-    height = setHeight;+    height = initHeight;​ 
 +    origin = new Point(xPos,​yPos);
   }   }
   ....   ....
Line 69: Line 69:
 </​code>​ </​code>​
  
-ως εξής+Ιδανικά θα θέλαμε να καλέσουμε έναν κατασκευαστή μέσα από έναν άλλο κατασκευαστή. Στη Java αυτό είναι εφικτό με χρήση του τελεστή **this**, ​ως εξής:
  
 <code java> <code java>
Line 78: Line 78:
   private Point origin;   private Point origin;
     ​     ​
-  ​// the Rectangle class has one constructor +  public Rectangle(int ​initWidth, int initHeight, Point initOrigin) { 
-  ​public Rectangle(int ​setWidth, int setHeight, Point o) { +    ​width = initWidth;​ 
-    ​this(setWidth,​ setHeight)+    height = initHeight
-    origin = o;+    origin = initOrigin;
   }   }
   ​   ​
-  public Rectangle(int ​setWidth, int setHeight) { +  public Rectangle(int ​initWidth, int initHeight, int xPos, int yPos) { 
-    ​width = setWidth; +    ​this(initWidth,​ initHeight, new Point(xPos,​yPos));
-    height = setHeight;+
   }   }
   ....   ....
Line 95: Line 94:
  
 <WRAP important 80% center round> <WRAP important 80% center round>
-Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευατή. ​Το παρακάτω παράδειγμα ​βγάζει μήνυμα λάθους από τον compiler.+Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευαστή. Αν δεν το κάνετε και προηγηθεί ​μία άλλη ​εντολή πριν την κλήση του κατασκευαστή θα λάβετε ένα ​μήνυμα λάθους από τον compiler. ​Ενδεικτικό είναι το παρακάτω παράδειγμα:​  
 <code java> <code java>
 public class Rectangle { public class Rectangle {
Line 103: Line 103:
   private Point origin;   private Point origin;
     ​     ​
-  ​// the Rectangle class has one constructor +  public Rectangle(int ​width, int height, Point origin) { 
-  ​public Rectangle(int ​setWidth, int setHeight, Point o) { +    ​this.origin = origin;  
-    origin = o+    this(widthheight);
-    this(setWidthsetHeight);+
     ​     ​
   }   }
   ​   ​
-  public Rectangle(int ​setWidth, int setHeight) { +  public Rectangle(int ​width, int height) { 
-    width = setWidth+    ​this.width = width
-    height = setHeight;+    ​this.height = height;
   }   }
   ....   ....
Line 121: Line 120:
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης,​ για λογαριασμό του οποίου εκτελείται. Μπορείτε να τον χρησιμοποιείτε τόσο για να προσπελάσετε τα πεδία του αντικειμένου ή να καλέσετε τον κατασκευαστή της κλάσης για το τρέχον αντικείμενο. Με χρήση του τελεστή **this** μπορείτε επίσης να καλέσετε και μεθόδους της κλάσης από το τρέχον αντικείμενο,​ πράγμα που όμως δεν θα το δείτε στην πράξη, καθώς ​δεν υπάρχει ανάγκη για κάτι τέτοιο.+**Συμπερασματικά** 
 + 
 +O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης,​ για λογαριασμό του οποίου εκτελείται. Μπορείτε να τον χρησιμοποιείτε τόσο για να προσπελάσετε τα πεδία του αντικειμένου ή να καλέσετε τον κατασκευαστή της κλάσης για το τρέχον αντικείμενο. Με χρήση του τελεστή **this** μπορείτε επίσης να καλέσετε και μεθόδους της κλάσης από το τρέχον αντικείμενο,​ πράγμα που όμως δεν θα το δείτε, καθώς ​στην πράξη δεν υπάρχει ανάγκη για κάτι τέτοιο
 + 
 +Μπορείτε να δείτε την κλάση **Rectangle**,​ όπως διαμορφώνεται με χρήση του τελεστή **this** τόσο για την κλήση ενός κατασκευαστή της κλάσης από άλλο, όσο για την πρόσβαση στα πεδία της κλάσης όταν αυτά επισκιάζονται από τοπικές μεταβλητές ή παραμέτρους μεθόδων με το ίδιο όνομα {{:​java:​rectangle.java-this.tgz|εδώ}}.
 </​WRAP>​ </​WRAP>​
  
-|Προηγούμενο:​ [[:​java:​objects| Δημιουργώντας Αντικείμενα ]] | Επόμενο:​ [[:​java:​static_keyword | Στατικές μεταβλητές και μέθοδοι ]]|+|Προηγούμενο:​ [[:​java:​objects| Δημιουργία Αντικειμένων ]] | [[:toc | Περιεχόμενα ]] | Επόμενο:​ [[:​java:​static_keyword | Στατικές μεταβλητές και μέθοδοι ]]|
  
java/this_operator.1453712953.txt.gz · Last modified: 2016/02/26 11:15 (external edit)