This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:this_operator [2016/01/25 09:24] gthanos [Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this] |
java:this_operator [2020/02/21 12:16] gthanos [Ο τελεστής this] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== | ====== | ||
| + | |||
| + | Μέσω του τελεστή **this** μπορούμε: | ||
| + | * να έχουμε πρόσβαση στα πεδία του τρέχοντος αντικειμένου όταν υπάρχουν και τοπικές μεταβλητές που έχουν το ίδιο όνομα με το αντικείμενο. | ||
| + | * κατά τη δημιουργία του αντικειμένου να καλέσουμε ένα κατασκευαστή μέσω ενός άλλου κατασκευαστή. | ||
| ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this ===== | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this ===== | ||
| Line 16: | Line 20: | ||
| width = width; | width = width; | ||
| height = height; | height = height; | ||
| - | origin = o; | + | origin = origin; |
| } | } | ||
| ... | ... | ||
| Line 22: | Line 26: | ||
| </ | </ | ||
| - | Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή " | + | Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή/ |
| <code java> | <code java> | ||
| Line 35: | Line 39: | ||
| this.width = width; | this.width = width; | ||
| this.height = height; | this.height = height; | ||
| - | this.origin = o; | + | this.origin = origin; |
| } | } | ||
| ... | ... | ||
| Line 41: | Line 45: | ||
| </ | </ | ||
| - | __O τελεστής | + | <WRAP tip 80% center round> |
| + | __O τελεστής this υποδεικνύει το τρέχον αντικείμενο__. Με τον παραπάνω τρόπο μπορούμε να διακρίνουμε μία μεταβλητή του τρέχοντος αντικειμένου (της μορφής **this.**// | ||
| + | </ | ||
| - | ===== Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this ===== | + | ===== Κλήση ενός κατασκευαστή μέσω άλλου κατασκευαστή με χρήση του τελεστή this ===== |
| Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή. | Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή. | ||
| Line 54: | Line 60: | ||
| private Point origin; | private Point origin; | ||
| | | ||
| - | | + | public Rectangle(int |
| - | | + | width = initWidth; |
| - | width = setWidth; | + | height = initHeight; |
| - | height = setHeight; | + | origin = initOrigin; |
| - | origin = o; | + | |
| } | } | ||
| | | ||
| - | public Rectangle(int | + | public Rectangle(int |
| - | width = setWidth; | + | width = initWidth; |
| - | height = setHeight; | + | height = initHeight; |
| + | origin = new Point(xPos, | ||
| } | } | ||
| .... | .... | ||
| Line 78: | Line 84: | ||
| private Point origin; | private Point origin; | ||
| | | ||
| - | | + | public Rectangle(int |
| - | | + | |
| - | | + | height = initHeight; |
| - | origin = o; | + | origin = initOrigin; |
| } | } | ||
| | | ||
| - | public Rectangle(int | + | public Rectangle(int |
| - | | + | |
| - | height = setHeight; | + | |
| } | } | ||
| .... | .... | ||
| Line 92: | Line 97: | ||
| </ | </ | ||
| - | __Το παραπάνω, | + | <WRAP tip 80% center round> |
| + | Ο τελεστής **this** χρησιμοποιείται για να κληθεί από ένα κατασκευαστή ένας άλλος κατασκευαστής της ίδιας κλάσης. | ||
| + | </ | ||
| <WRAP important 80% center round> | <WRAP important 80% center round> | ||
| - | Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευατή. Αν δεν το κάνετε και προηγηθεί μία άλλη εντολή πριν την κλήση του κατασκευαστή θα λάβετε ένα μήνυμα λάθους από τον compiler. Ενδεικτικό είναι το παρακάτω παράδειγμα. | + | Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευαστή. Αν δεν το κάνετε και προηγηθεί μία άλλη εντολή πριν την κλήση του κατασκευαστή θα λάβετε ένα μήνυμα λάθους από τον compiler. Ενδεικτικό είναι το παρακάτω παράδειγμα: |
| <code java> | <code java> | ||
| Line 104: | Line 111: | ||
| private Point origin; | private Point origin; | ||
| | | ||
| - | | + | public Rectangle(int |
| - | | + | |
| - | origin = o; | + | /* η κλήση ενός κατασκευαστή μέσα από άλλο |
| - | this(setWidth, setHeight); | + | * κατασκευαστή, |
| + | * παράγει μήνυμα λάθους από τον compiler. | ||
| + | | ||
| + | this(width, height); | ||
| | | ||
| } | } | ||
| | | ||
| - | public Rectangle(int | + | public Rectangle(int |
| - | width = setWidth; | + | |
| - | height = setHeight; | + | |
| } | } | ||
| .... | .... | ||
| Line 121: | Line 131: | ||
| - | < | + | < |
| - | O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, | + | Συμπερασματικά, |
| + | * για να διακρίνεται τα πεδία του | ||
| + | * να καλέσετε | ||
| </ | </ | ||
| - | |Προηγούμενο: | + | Παρακάτω, |
| + | |||
| + | <code java Rectangle.java> | ||
| + | public class Rectangle { | ||
| + | |||
| + | // the Rectangle class has 3 fields | ||
| + | private int width; | ||
| + | private int height; | ||
| + | private Point origin; | ||
| + | |||
| + | // the Rectangle class has two constructors | ||
| + | public Rectangle(int width, int height, Point origin) { | ||
| + | this.width = width; | ||
| + | this.height = height; | ||
| + | this.origin = origin; | ||
| + | } | ||
| + | |||
| + | public Rectangle(int width, int height, int xPos, int yPos) { | ||
| + | this(width, height, new Point(xPos, yPos)); | ||
| + | } | ||
| + | |||
| + | public void setWidth(int width ) { | ||
| + | this.width = width; | ||
| + | } | ||
| + | |||
| + | public int getWidth() { | ||
| + | return width; | ||
| + | } | ||
| + | |||
| + | public void setHeight(int height ) { | ||
| + | this.height = height; | ||
| + | } | ||
| + | |||
| + | public int getHeight() { | ||
| + | return height; | ||
| + | } | ||
| + | |||
| + | public void setOrigin(Point o) { | ||
| + | origin = o; | ||
| + | } | ||
| + | |||
| + | public Point getOrigin() { | ||
| + | return origin; | ||
| + | } | ||
| + | |||
| + | public int getArea() { | ||
| + | | ||
| + | } | ||
| + | |||
| + | // Move rectangle origin by dx,dy | ||
| + | public void moveOrigin(int dx, int dy) { | ||
| + | origin.setX( origin.getX() + dx ); | ||
| + | origin.setY( origin.getY() + dy ); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |Προηγούμενο: | ||