User Tools

Site Tools


java:this_operator

This is an old revision of the document!


Ο τελεστής this

Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της κλάσης μέσω του τελεστή this

Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα, ως εξής

public class Rectangle {
 
  private int width;
  private int height;
  private Point origin;
 
  // the Rectangle class has one constructor
  public Rectangle(int width, int height, Point origin) {
    width = width;
    height = height;
    origin = o;
  }
  ...
}

Στον παραπάνω κώδικα οι τοπικές παράμετροι του κατασκευαστή συμπίπτουν με τα ονόματα των μεταβλητών της κλάσης. Σε αυτή την περίπτωση η τοπική μεταβλητή “κρύβει” (shadows) την μεταβλητή του αντικειμένου της κλάσης. Προκειμένου να έχουμε πρόσβαση στην μεταβλητή του αντικειμένου της κλάσης θα πρέπει να χρησιμοποιήσουμε τον τελεστή this, ως εξής:

public class Rectangle {
 
  private int width;
  private int height;
  private Point origin;
 
  // the Rectangle class has one constructor
  public Rectangle(int width, int height, Point origin) {
    this.width = width;
    this.height = height;
    this.origin = o;
  }
  ...
}

O τελεστής this υποδεικνύει το τρέχον αντικείμενο. Με τον παραπάνω τρόπο μπορούμε να διακρίνουμε μία μεταβλητής του τρέχοντος αντικειμένου (this.variable) από μία τοπική μεταβλητή (variable) με το ίδιο όνομα.

Πρόσβαση στους κατασκευαστές της κλάσης μέσω του τελεστή this

Ας ξαναγράψουμε το παρακάτω τμήμα κώδικα το οποίο συναντήσαμε προηγούμενα

public class Rectangle {
 
  private int width;
  private int height;
  private Point origin;
 
  // the Rectangle class has one constructor
  public Rectangle(int setWidth, int setHeight, Point o) {
    width = setWidth;
    height = setHeight;
    origin = o;
  }
 
  public Rectangle(int setWidth, int setHeight) {
    width = setWidth;
    height = setHeight;
  }
  ....
}

ως εξής

public class Rectangle {
 
  private int width;
  private int height;
  private Point origin;
 
  // the Rectangle class has one constructor
  public Rectangle(int setWidth, int setHeight, Point o) {
    this(setWidth, setHeight);
    origin = o;
  }
 
  public Rectangle(int setWidth, int setHeight) {
    width = setWidth;
    height = setHeight;
  }
  ....
}

Το παραπάνω, είναι αποδεκτό από τον compiler της Java. Ο τελεστής this χρησιμοποιείται για να κληθεί από ένα κατασκευαστή ένας άλλος κατασκευαστής της ίδιας κλάσης.

Η κλήση ενός κατασκευαστή μέσα από άλλο κατασκευαστή θα πρέπει να γίνει στην αρχή του σώματος του κατασκευατή. Το παρακάτω παράδειγμα βγάζει μήνυμα λάθους από τον compiler.

public class Rectangle {
 
  private int width;
  private int height;
  private Point origin;
 
  // the Rectangle class has one constructor
  public Rectangle(int setWidth, int setHeight, Point o) {
    origin = o;
    this(setWidth, setHeight);
 
  }
 
  public Rectangle(int setWidth, int setHeight) {
    width = setWidth;
    height = setHeight;
  }
  ....
}

O τελεστής this δείχνει στο τρέχον αντικείμενο της εκάστοτε κλάσης, για λογαριασμό του οποίου εκτελείται. Μπορείτε να τον χρησιμοποιείτε τόσο για να προσπελάσετε τα πεδία του αντικειμένου ή να καλέσετε τον κατασκευαστή της κλάσης για το τρέχον αντικείμενο. Με χρήση του τελεστή this μπορείτε επίσης να καλέσετε και μεθόδους της κλάσης από το τρέχον αντικείμενο, πράγμα που όμως δεν θα το δείτε στην πράξη, καθώς δεν υπάρχει ανάγκη για κάτι τέτοιο.

java/this_operator.1453712924.txt.gz · Last modified: 2016/01/25 09:08 by gthanos