java:class_methods

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Μέθοδοι της Κλάσης ====== Προηγουμένως συναντήσαμε ορισμούς μεθόδων. Γενικά, κατά τον ορισμό μίας μεθόδου έχουμε τα εξής: - Προσδιοριστές τύπου, όπως **public**, **private**, **protected** (θα τον συναντήσουμε στην συνέχεια). - Τον τύπο της επιστρεφόμενης τιμής ή void εάν η μέθοδος δεν επιστρέφει κάτι. - Το όνομα της μεθόδου. Ισχύει και εδώ ο "κανόνας" ότι τα ονομάτα ξεκινούν με μικρό γράμμα και εάν πρόκειται για ονόματα με περισσότερες από μία λέξεις αυτές χωρίζονται με κεφαλαία γράμματα. Η πρώτη λέξη κάθε μεθόδου θα πρέπει να είναι ρήμα. Μερικά παραδείγματα μπορείτε να δείτε παρακάτω: - run - runFast - getBackground - getFinalData - compareTo - setLatitude - isEmpty - H λίστα των παραμέτρων μέσα σε παρένθεση, χωρισμένες με κόμμα. Κάθε παράμετρος εκτός από τον τύπο της οφείλει να διαθέτει και τον προσδιοριστή τύπου της, π.χ. ''int speed'' ή ''double latitude''. Εάν δεν υπάρχουν παράμετροι το περιεχόμενο των παρανθέσεων είναι κενό. - Μία σειρά από Exceptions (θα συζητηθούν αργότερα). - Το κυρίως σώμα της μεθόδου, το οποίο περιέχεται μέσα σε αγκύλες. Παρακάτω δίνεται τυπικά παραδείγματα μεθόδων <code java> 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[] setColor) { color = setColor; } public int[] getColor() { return color; } public void setPoint(Point o) { origin = o; } public Point getPoint() { return origin; } </code> ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων (ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν - ως προς τον τύπο τους - ως προς τον αριθμό τους και - ως προς την σειρά τους (//αν και ο compiler της Java αντιλαμβάνεται την διαφορά, δεν συνίσταται να έχετε μεθόδους με τον ίδιο αριθμό και τύπο ορισμάτων, τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά//) Ας υποθέσουμε ότι έχουμε την κλάση **DrawChars** από ένα υποθετικό πρόγραμμα εκτύπωσης χαρακτήρων στην οθόνη. Διαθέτουμε την μέθοδο //draw// η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων. <code java> 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) { ... } } </code> Στην παραπάνω κλάση αν δεν είχαμε την δυνατότητα **υπερφόρτωσης** των μεθόδων της θα έπρεπε να κάνουμε κάτι σαν το παρακάτω, το οποίο καταλήγει σε αισθητικά άσχημο και λιγότερο συντηρήσιμο κώδικα. <code c> public class DrawChars { ... public void drawString(String s) { ... } public void drawInt(int i) { ... } public void drawDoble(double f) { ... } public void drawIntDouble(int i, double f) { ... } } </code> <WRAP info> Ανάλογη με την υπερφόρτωση μεθόδων είναι και η υπερφόρτωση κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα, έτσι μπορούμε να έχουμε και πολλούς κατασκευαστές με διαφορετικά ορίσματα. Δείτε το παράδειγμα που ακολουθεί για την κλάση Rectangle της προηγούμενης παραγράφου. </WRAP> <code java Rectangle.java> public class Rectangle { // the Rectangle class has 3 fields private int width; private int height; private int[] color;// (in rgb format) private Point origin; // the Rectangle class has one constructor public Rectangle(int setWidth, int setHeight, int[] setColor, Point o) { width = setWidth; height = setHeight; color = setColor; origin = o; } public Rectangle(int setWidth, int setHeight, int[] setColor, int X, int Y) { width = setWidth; height = setHeight; color = setColor; origin = new Point(X,Y); } // 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 setColor(int[] setColor) { color = setColor; } public int[] getColor() { return color; } public void setPoint(Point o) { origin = o; } public Point getPoint() { return origin; } public String toString() { return "Origin Point: ("+origin.getX()+","+origin.getY()+"), Width: "+width+", Height: "+height+ ", RGB: (0x"+Integer.toHexString(color[0])+", 0x"+Integer.toHexString(color[1])+ ", 0x"+Integer.toHexString(color[0])+")"; } } </code> |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | Επόμενο: [[:java:objects | Δημιουργώντας Αντικείμενα ]]|

java/class_methods.1453474841.txt.gz · Last modified: 2016/02/26 11:15 (external edit)