java:this_operator
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:this_operator [2016/02/16 21:17] – [Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this] gthanos | java:this_operator [2022/02/23 16:10] (current) – gthanos | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== | ====== | ||
- | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this ===== | + | Μέσω του τελεστή **this** μπορούμε: |
+ | * να έχουμε πρόσβαση στα πεδία του τρέχοντος αντικειμένου όταν υπάρχουν και τοπικές μεταβλητές που έχουν το ίδιο όνομα με το αντικείμενο. | ||
+ | * κατά τη δημιουργία του αντικειμένου να καλέσουμε ένα κατασκευαστή μέσω ενός άλλου κατασκευαστή. | ||
+ | |||
+ | ===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης με χρήση του τελεστή this ===== | ||
Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα, | Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα, | ||
Line 13: | Line 17: | ||
| | ||
// the Rectangle class has one constructor | // the Rectangle class has one constructor | ||
- | public Rectangle(int width, int height, Point o) { | + | public Rectangle(int width, int height, Point origin) { |
width = width; | width = width; | ||
height = height; | height = height; | ||
- | origin = o; | + | origin = origin; |
} | } | ||
... | ... | ||
Line 22: | Line 26: | ||
</ | </ | ||
- | Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή " | + | Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή/ |
<code java> | <code java> | ||
Line 32: | Line 36: | ||
| | ||
// the Rectangle class has one constructor | // the Rectangle class has one constructor | ||
- | public Rectangle(int width, int height, Point o) { | + | public Rectangle(int width, int height, Point origin) { |
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 ===== |
Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή. | Ας ξαναδούμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα θέλοντας να επιχειρήσουμε να επαναχρησιμοποιήσουμε τμήματα κώδικα ενός κατασκευαστή από έναν άλλο κατασκευαστή. | ||
<code java> | <code java> | ||
- | public | + | class Rectangle { |
| | ||
- | | + | int width; |
- | | + | int height; |
- | | + | Point origin; |
| | ||
- | | + | Rectangle(int |
- | public | + | width = initWidth; |
- | width = setWidth; | + | height = initHeight; |
- | height = setHeight; | + | origin = initOrigin; |
- | origin = o; | + | |
} | } | ||
| | ||
- | | + | Rectangle(int |
- | width = setWidth; | + | width = initWidth; |
- | height = setHeight; | + | height = initHeight; |
+ | origin = new Point(xPos, | ||
} | } | ||
.... | .... | ||
Line 72: | Line 78: | ||
<code java> | <code java> | ||
- | public | + | class Rectangle { |
| | ||
- | | + | int width; |
- | | + | int height; |
- | | + | Point origin; |
| | ||
- | | + | Rectangle(int |
- | public | + | |
- | | + | height = initHeight; |
- | origin = o; | + | origin = initOrigin; |
} | } | ||
| | ||
- | | + | Rectangle(int |
- | | + | |
- | height = setHeight; | + | |
} | } | ||
.... | .... | ||
} | } | ||
</ | </ | ||
- | |||
- | __Το παραπάνω, | ||
<WRAP important 80% center round> | <WRAP important 80% center round> | ||
- | Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευατή. Αν δεν το κάνετε και προηγηθεί μία άλλη εντολή πριν την κλήση του κατασκευαστή θα λάβετε ένα μήνυμα λάθους από τον compiler. Ενδεικτικό είναι το παρακάτω παράδειγμα. | + | Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευαστή. Αν δεν το κάνετε και προηγηθεί μία άλλη εντολή πριν την κλήση του κατασκευαστή θα λάβετε ένα μήνυμα λάθους από τον compiler. Ενδεικτικό είναι το παρακάτω παράδειγμα: |
<code java> | <code java> | ||
- | public | + | class Rectangle { |
| | ||
- | | + | int width; |
- | | + | int height; |
- | | + | Point origin; |
| | ||
- | | + | Rectangle(int |
- | public | + | |
- | origin = o; | + | /* η κλήση ενός κατασκευαστή μέσα από άλλο |
- | this(setWidth, setHeight); | + | * κατασκευαστή, |
+ | * παράγει μήνυμα λάθους από τον compiler. | ||
+ | | ||
+ | this(width, height); | ||
| | ||
} | } | ||
| | ||
- | | + | Rectangle(int |
- | width = setWidth; | + | |
- | height = setHeight; | + | |
} | } | ||
.... | .... | ||
Line 120: | Line 126: | ||
</ | </ | ||
+ | /* | ||
+ | <WRAP info 80% center round> | ||
+ | Συμπερασματικά, | ||
+ | * για να διακρίνεται τα πεδία του τρέχοντος αντικειμένου σε σχέση με τοπικές μεταβλητές που έχουν το ίδιο όνομα με τα πεδία αυτά. | ||
+ | * να καλέσετε τον κατασκευαστή της κλάσης για το τρέχον αντικείμενο. | ||
+ | </ | ||
- | <WRAP tip 80% center round> | + | Παρακάτω, μπορείτε να δείτε την κλάση |
- | O τελεστής **this** δείχνει στο τρέχον αντικείμενο της εκάστοτε | + | |
- | Μπορείτε να δείτε την κλάση **Rectangle**, όπως διαμορφώνεται με χρήση του τελεστή **this** τόσο για την κλήση ενός κατασκευαστή της κλάσης από άλλο, όσο για την πρόσβαση στα πεδία της κλάσης όταν αυτά επισκιάζονται από τοπικές μεταβλητές ή παραμέτρους μεθόδων με το ίδιο όνομα | + | <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 width, int height, Point origin) { | ||
+ | | ||
+ | this.height = height; | ||
+ | this.origin = origin; | ||
+ | } | ||
+ | |||
+ | Rectangle(int width, int 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 ) { | ||
+ | | ||
+ | | ||
+ | |||
+ | int getHeight() { | ||
+ | return height; | ||
+ | | ||
+ | |||
+ | void setOrigin(Point o) { | ||
+ | origin = o; | ||
+ | } | ||
+ | |||
+ | Point getOrigin() { | ||
+ | return origin; | ||
+ | } | ||
+ | |||
+ | int getArea() { | ||
+ | | ||
+ | } | ||
+ | |||
+ | // Move rectangle origin by dx,dy | ||
+ | void moveOrigin(int dx, int dy) { | ||
+ | origin.setX( origin.getX() + dx ); | ||
+ | origin.setY( origin.getY() + dy ); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
- | |Προηγούμενο: | + | |Προηγούμενο: |
java/this_operator.1455657424.txt.gz · Last modified: 2016/02/16 21:17 by gthanos