User Tools

Site Tools


java:class_constructors

Κατασκευαστές της κλάσης

Οι κατασκευαστές μιας κλάσης είναι ειδικές μέθοδοι με τα εξής χαρακτηριστικά:

  1. έχουν προσδιοριστή πρόσβασης public.
  2. δεν έχουν επιστρεφόμενο τύπο και
  3. το όνομα τους ταυτίζεται με το όνομα της κλάσης.

Για παράδειγμα, για την κλάση Rectangle που δίνεται παρακάτω ο κατασκευαστής της κλάσης έχει ως εξής:

Rectangle.java
public class Rectangle {
  int width;
  int height;
  Point origin;
 
  public Rectangle(int initWidth, int initHeight, Point initOrigin) {
    width = initWidth;
    height = initHeight;
    origin = initOrigin;
  }
}

Ο ρόλος του κατασκευαστή είναι να δεσμεύσει την απαραίτητη μνήμη για την δημιουργία του αντικειμένου και να αρχικοποιήσει τα πεδία της κλάσης με βάση τις αρχικές παραμέτρους με τις οποίες καλείται. Η κλήση του κατασκευαστή γίνεται πάντα με χρήση του τελεστή new και θα τη δούμε σε επόμενη ενότητα.

Κάθε κλάση έχει τουλάχιστον ένα κατασκευαστή. Εάν δεν δηλώσετε κατασκευαστή σε κάποια κλάση ο compiler δημιουργεί τον default κατασκευαστή, δηλ. ένα κατασκευαστή χωρίς ορίσματα και αρχικοποιεί τα πεδία της κλάση σε μηδέν (0) για βασικούς τύπουs ή σε null για αναφορικούς/σύνθετους τύπους.

Default κατασκευαστής

Στο προηγούμενο παράδειγμα της κλάσης Rectangle εάν υποθέσουμε ότι αυτή δεν έχει κατασκευαστή

Rectangle.java
public class Rectangle {
  int width;
  int height;
  Point origin;
 
}

Ο compiler θα δημιουργήσει τον παρακάτω κατασκευαστή, ο οποίος αρχικοποιεί όλες τις τιμές σε μηδέν για τους βασικούς (primitive) τύπους δεδομένων και σε null για τους αναφορικούς (reference) τύπους δεδομένων.

public Rectangle() {
  width = 0;
  height = 0;
  origin = null;
}

με βάση τους κανόνες αυτόματης αρχικοποίησης μεταβλητών.

Διαφορετικοί κατασκευαστές σε μία κλάση

Ανάλογη με την υπερφόρτωση μεθόδων είναι και η “υπερφόρτωση” κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα, έτσι μπορούμε να έχουμε και πολλούς κατασκευαστές με διαφορετικά ορίσματα. Δείτε το παράδειγμα που ακολουθεί για την κλάση Rectangle της προηγούμενης ενότητας. Στο παράδειγμα αυτό η κλάση διαθέτει τους παρακάτω δύο κατασκευαστές

public Rectangle(int initWidth, int initHeight, Point initOrigin);
public Rectangle(int initWidth, int initHeight, int xPos, int yPos);

O πρώτος κατασκευαστής λαμβάνει ως τρίτο όρισμα ένα αντικείμενο τύπου Point, το οποίο το αναθέτει στο πεδίο origin. Ο δεύτερος κατασκευαστής λαμβάνει ως τρίτο και τέταρτο όρισμα δύο ακεραίους από τους οποίους κατασκευάζει ένα νέο αντικείμενο τύπου Point.

Rectangle.java
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 initWidth, int initHeight, Point initOrigin) {
    width = initWidth;
    height = initHeight;
    origin = initOrigin;
  }
 
  public Rectangle(int initWidth, int initHeight, int xPos, int yPos) {
    width = initWidth;
    height = initHeight;
    origin = new Point(xPos,yPos);
  }
 
  // the Rectangel class has 3 methods
  void setWidth(int newWidth ) {
    width = newWidth;
  }
 
  int getWidth() {
    return width;
  }
 
  void setHeight(int newHeight ) {
    height = newHeight;
  }
 
  int getHeight() {
    return height;
  }
 
  Point getOrigin() {
    return origin;
  }
 
  void setOrigin(Point newOrigin) {
    origin = newOrigin;
  }
 
  void setOrigin(int newX, int newY) {
    origin.setX(newX);
    origin.setY(newY);
  }
 
}
java/class_constructors.txt · Last modified: 2022/02/23 10:17 (external edit)