User Tools

Site Tools


java:this_operator

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:this_operator [2017/01/26 10:42] – [Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this] gthanosjava:this_operator [2022/02/23 16:10] (current) gthanos
Line 1: Line 1:
 ======  Ο τελεστής this ====== ======  Ο τελεστής this ======
  
-===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this =====+Μέσω του τελεστή **this** μπορούμε:  
 +  * να έχουμε πρόσβαση στα πεδία του τρέχοντος αντικειμένου όταν υπάρχουν και τοπικές μεταβλητές που έχουν το ίδιο όνομα με το αντικείμενο. 
 +  * κατά τη δημιουργία του αντικειμένου να καλέσουμε ένα κατασκευαστή μέσω ενός άλλου κατασκευαστή. 
 + 
 +===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης με χρήση του τελεστή this =====
  
 Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα, ως εξής Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα, ως εξής
Line 41: Line 45:
 </code> </code>
  
-__O τελεστής **this** υποδεικνύει το τρέχον αντικείμενο__. Με τον παραπάνω τρόπο μπορούμε να διακρίνουμε μία μεταβλητής του τρέχοντος αντικειμένου (της μορφής **this.**//variable//) από μία τοπική μεταβλητή (//variable//) με το ίδιο όνομα.+<WRAP tip 80% center round> 
 +__O τελεστής this υποδεικνύει το τρέχον αντικείμενο__. Με τον παραπάνω τρόπο μπορούμε να διακρίνουμε μία μεταβλητή του τρέχοντος αντικειμένου (της μορφής **this.**//variable//) από μία τοπική μεταβλητή (//variable//) με το ίδιο όνομα. 
 +</WRAP>
  
-===== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this =====+===== Κλήση ενός κατασκευαστή μέσω άλλου κατασκευαστή με χρήση του τελεστή this =====
  
 Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή.  Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή. 
  
 <code java> <code java>
-public class Rectangle {+class Rectangle {
          
-  private int width; +  int width; 
-  private int height; +  int height; 
-  private Point origin;+  Point origin;
          
-  public Rectangle(int initWidth, int initHeight, Point initOrigin) {+  Rectangle(int initWidth, int initHeight, Point initOrigin) {
     width = initWidth;     width = initWidth;
     height = initHeight;     height = initHeight;
Line 60: Line 66:
   }   }
      
-  public Rectangle(int initWidth, int initHeight, int xPos, int yPos) {+  Rectangle(int initWidth, int initHeight, int xPos, int yPos) {
     width = initWidth;     width = initWidth;
     height = initHeight;     height = initHeight;
Line 72: Line 78:
  
 <code java> <code java>
-public class Rectangle {+class Rectangle {
          
-  private int width; +  int width; 
-  private int height; +  int height; 
-  private Point origin;+  Point origin;
          
-  public Rectangle(int initWidth, int initHeight, Point initOrigin) {+  Rectangle(int initWidth, int initHeight, Point initOrigin) {
     width = initWidth;     width = initWidth;
     height = initHeight;     height = initHeight;
Line 84: Line 90:
   }   }
      
-  public Rectangle(int initWidth, int initHeight, int xPos, int yPos) {+  Rectangle(int initWidth, int initHeight, int xPos, int yPos) {
     this(initWidth, initHeight, new Point(xPos,yPos));     this(initWidth, initHeight, new Point(xPos,yPos));
   }   }
Line 90: Line 96:
 } }
 </code> </code>
- 
-__Το παραπάνω, είναι αποδεκτό από τον compiler της Java__. Ο τελεστής **this** χρησιμοποιείται για να κληθεί από ένα κατασκευαστή ένας άλλος κατασκευαστής της ίδιας κλάσης. 
  
 <WRAP important 80% center round> <WRAP important 80% center round>
Line 97: Line 101:
  
 <code java> <code java>
-public class Rectangle {+class Rectangle {
          
-  private int width; +  int width; 
-  private int height; +  int height; 
-  private Point origin;+  Point origin;
          
-  public Rectangle(int width, int height, Point origin) { +  Rectangle(int width, int height, Point origin) { 
-    this.origin = origin;  +    this.origin = origin; 
-    this(width, height);+    /* η κλήση ενός κατασκευαστή μέσα από άλλο 
 +     * κατασκευαστή, χωρίς να είναι 1η εντολή  
 +     * παράγει μήνυμα λάθους από τον compiler. 
 +     */  
 +    this(width, height); 
          
   }   }
      
-  public Rectangle(int width, int height) {+  Rectangle(int width, int height) {
     this.width = width;     this.width = width;
     this.height = height;     this.height = height;
Line 118: Line 126:
 </WRAP> </WRAP>
  
 +/*
 +<WRAP info 80% center round>
 +Συμπερασματικά, τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, για λογαριασμό του οποίου εκτελείται. Μπορείτε να τον χρησιμοποιείτε 
 +  * για να διακρίνεται τα πεδία του τρέχοντος αντικειμένου σε σχέση με τοπικές μεταβλητές που έχουν το ίδιο όνομα με τα πεδία αυτά. 
 +  * να καλέσετε τον κατασκευαστή της κλάσης για το τρέχον αντικείμενο.
 +</WRAP> */
  
-<WRAP tip 80% center round> +Παρακάτω, μπορείτε να δείτε την κλάση **Rectangle**, όπως διαμορφώνεται με χρήση του τελεστή **this** τόσο για την κλήση ενός κατασκευαστή της κλάσης από άλλο, όσο για την πρόσβαση στα πεδία της κλάσης όταν αυτά επισκιάζονται από τοπικές μεταβλητές ή παραμέτρους μεθόδων με το ίδιο όνομα.
-τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, για λογαριασμό του οποίου εκτελείται. Μπορείτε να τον χρησιμοποιείτε τόσο για να προσπελάσετε τα πεδία του αντικειμένου ή να καλέσετε τον κατασκευαστή της κλάσης για το τρέχον αντικείμενο. Με χρήση του τελεστή **this** μπορείτε επίσης να καλέσετε και μεθόδους της κλάσης από το τρέχον αντικείμενο, πράγμα που όμως δεν θα το δείτε, καθώς στην πράξη δεν υπάρχει ανάγκη για κάτι τέτοιο.+
  
-Μπορείτε να δείτε την κλάση **Rectangle**όπως διαμορφώνεται με χρήση του τελεστή **this** τόσο για την κλήση ενός κατασκευαστή της κλάσης από άλλοόσο για την πρόσβαση στα πεδία της κλάσης όταν αυτά επισκιάζονται από τοπικές μεταβλητές ή παραμέτρους μεθόδων με το ίδιο όνομα {{:java:rectangle.java-this.tgz|εδώ}}. +<code java Rectangle.java> 
-</WRAP>+class Rectangle { 
 +     
 +  // the Rectangle class has 3 fields 
 +  int width; 
 +  int height; 
 +  Point origin; 
 +     
 +  // the Rectangle class has two constructors 
 +  Rectangle(int widthint height, Point origin) { 
 +    this.width = width; 
 +    this.height = height; 
 +    this.origin = origin; 
 +  } 
 +   
 +  Rectangle(int widthint height, int xPos, int yPos) { 
 +    this(width, height, new Point(xPos, yPos)); 
 +  } 
 +     
 +  void setWidth(int width ) { 
 +    this.width = width; 
 +  } 
 +   
 +  int getWidth() { 
 +    return width; 
 +  } 
 +     
 +  void setHeight(int height ) { 
 +    this.height = height; 
 +  } 
 +   
 +  int getHeight() { 
 +    return height; 
 +  } 
 +     
 +  void setOrigin(Point o) { 
 +    origin = o; 
 +  } 
 +   
 +  Point getOrigin() { 
 +    return origin; 
 +  } 
 +   
 +  int getArea() { 
 +       return width * height; 
 +  } 
 +    
 +  // Move rectangle origin by dx,dy 
 +  void moveOrigin(int dx, int dy) { 
 +    origin.setX( origin.getX() + dx ); 
 +    origin.setY( origin.getY() + dy ); 
 +  } 
 +} 
 +</code>
  
-|Προηγούμενο: [[:java:objectsΔημιουργία Αντικείμενων ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:static_keyword | Στατικές μεταβλητές και μέθοδοι ]]|+|Προηγούμενο: [[:java:arrays Πίνακες]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:static_keyword | Στατικές μεταβλητές και μέθοδοι ]]|
  
java/this_operator.1485427360.txt.gz · Last modified: 2017/01/26 10:42 (external edit)