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:24]
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 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 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>
Line 104: 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 122: 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.1453713889.txt.gz · Last modified: 2016/02/26 11:15 (external edit)