This is an old revision of the document!
Ο ορισμός οποιασδήποτε μεθόδου στη Java παρέχει τα εξής πεδία
<πρ. πρόσβασης> <επιστ. τύπος> <όνομα> (<λίστα περαμέτρων>) { }
Ο ορισμός οποιασδήποτε μεθόδου στη Java παρέχει τα εξής πεδία
int speed ή double latitude. Εάν δεν υπάρχουν παράμετροι το περιεχόμενο των παρενθέσεων είναι κενό.Παρακάτω δίνονται τυπικά παραδείγματα μεθόδων:
public void setWidth(int newWidth ) { width = newWidth; } public int getWidth() { return width; } public void setHeight(int newHeight ) { height = newHeight; } public int getHeight() { return height; } public void setColor(int[] newColor) { color = newColor; } public int[] getColor() { return color; } public void setPoint(Point newOrigin) { origin = newOrigin; } public Point getPoint() { return origin; }
Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων (ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα. Τα ορίσματα μπορούν να διαφέρουν
Aν και ο compiler της Java αντιλαμβάνεται την διαφορά, δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και τύπο ορισμάτων, τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά.
Ας υποθέσουμε ότι έχουμε την κλάση DrawChars η οποία αποτελεί μέρος ενός υποθετικού προγράμματος εκτύπωσης χαρακτήρων στην οθόνη του υπολογιστή. Διαθέτουμε την μέθοδο draw η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.
public class DrawChars { ... public void draw(String s) { ... } public void draw(int i) { ... } public void draw(double f) { ... } public void draw(int i, double f) { ... } }
Στην παραπάνω κλάση αν δεν είχαμε την δυνατότητα υπερφόρτωσης των μεθόδων της θα έπρεπε να κάνουμε κάτι σαν το παρακάτω, το οποίο καταλήγει σε αισθητικά άσχημο και λιγότερο συντηρήσιμο κώδικα.
public class DrawChars { ... public void drawString(String s) { ... } public void drawInt(int i) { ... } public void drawDouble(double f) { ... } public void drawIntDouble(int i, double f) { ... } }
Ανάλογη με την υπερφόρτωση μεθόδων είναι και η υπερφόρτωση κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα, έτσι μπορούμε να έχουμε και πολλούς κατασκευαστές με διαφορετικά ορίσματα. Δείτε το παράδειγμα που ακολουθεί για την κλάση Rectangle της προηγούμενης ενότητας. Στο παράδειγμα αυτό η κλάση διαθέτει τους παρακάτω δύο κατασκευαστές
public Rectangle(int initWidth, int initHeight, Point initOrigin); public Rectangle(int initWidth, int initHeight, int xPos, int yPos);
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 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 public void setWidth(int newWidth ) { width = newWidth; } public int getWidth() { return width; } public void setHeight(int newHeight ) { height = newHeight; } public int getHeight() { return height; } public void setOrigin(Point newOrigin) { origin = newOrigin; } public Point getOrigin() { return origin; } }
| Προηγούμενο: Τα πεδία της κλάσης | Περιεχόμενα | Επόμενο: Κατασκευαστές της κλάσης |