This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
|
java:class_methods [2017/02/16 09:56] gthanos |
java:class_methods [2022/02/22 15:44] gthanos [Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Μέθοδοι της Κλάσης ====== | ====== Μέθοδοι της Κλάσης ====== | ||
| - | Ο ορισμός οποιασδήποτε μεθόδου στη Java παρέχει τα εξής πεδία | + | Ο ορισμός οποιασδήποτε μεθόδου στη Java περιέχει τα εξής πεδία |
| - | <color red>< | + | <color red>< |
| - | }** | + | |
| - | - Προσδιοριστές πρόσβασης, | + | - <color red>Προσδιοριστές πρόσβασης</ |
| - | - Τον τύπο της επιστρεφόμενης τιμής ή void εάν η μέθοδος δεν επιστρέφει κάτι. | + | - <color green>Τον τύπο της επιστρεφόμενης τιμής</ |
| - | - Το όνομα της μεθόδου. | + | - <color magenta>Το όνομα της μεθόδου</ |
| - | - H λίστα των παραμέτρων μέσα σε παρένθεση, | + | - <color orange>H λίστα των παραμέτρων</ |
| + | - Μία σειρά από <color gray> | ||
| - Το κυρίως σώμα της μεθόδου, | - Το κυρίως σώμα της μεθόδου, | ||
| + | ===== Κανόνες ονοματολογίας ===== | ||
| - | Ο ορισμός οποιασδήποτε μεθόδου στη Java παρέχει τα εξής πεδία | + | Ισχύει και εδώ ο " |
| - | + | ||
| - | - Προσδιοριστές τύπου, όπως **public**, **private**, | + | |
| - | - Τον τύπο της επιστρεφόμενης τιμής ή void εάν η μέθοδος δεν επιστρέφει κάτι. | + | |
| - | - Το όνομα της μεθόδου. | + | |
| - run | - run | ||
| - runFast | - runFast | ||
| Line 25: | Line 22: | ||
| - setLatitude | - setLatitude | ||
| - isEmpty | - isEmpty | ||
| - | - H λίστα των παραμέτρων μέσα σε παρένθεση, | ||
| - | - Μία σειρά από Exceptions (θα συζητηθούν αργότερα). | ||
| - | - Το κυρίως σώμα της μεθόδου, | ||
| - | Παρακάτω | + | ===== Παραδείγματα μεθόδων ===== |
| + | |||
| + | Με βάση παράδειγμα της προηγούμενης ενότητας για την κλάση **Rectangle** που αναπαριστά ένα ορθογώνιο | ||
| <code java> | <code java> | ||
| - | | + | class Rectangle { |
| + | |||
| + | // the Rectangle class has 3 fields | ||
| + | int width; | ||
| + | int height; | ||
| + | Point origin; | ||
| + | |||
| + | // the Rectangle class has one constructor | ||
| + | | ||
| + | width = initWidth; | ||
| + | height = initHeight; | ||
| + | origin = initOrigin; | ||
| + | } | ||
| + | |||
| + | | ||
| width = newWidth; | width = newWidth; | ||
| - | } | ||
| - | | ||
| - | public int getWidth() { | ||
| - | return width; | ||
| } | } | ||
| | | ||
| - | | + | void setHeight(int newHeight ) { |
| height = newHeight; | height = newHeight; | ||
| - | } | ||
| - | | ||
| - | public int getHeight() { | ||
| - | return height; | ||
| } | } | ||
| | | ||
| - | | + | |
| - | | + | |
| } | } | ||
| | | ||
| - | | + | |
| - | | + | |
| - | } | + | origin.setY(newY); |
| + | } | ||
| | | ||
| - | | + | void setOrigin(Point newOrigin) { |
| origin = newOrigin; | origin = newOrigin; | ||
| } | } | ||
| | | ||
| - | public Point getPoint() { | + | } |
| - | | + | |
| - | } | + | |
| </ | </ | ||
| + | |||
| + | <WRAP important 80% center round> | ||
| + | Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι ότι οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης. Στο παραπάνω παράδειγμα, | ||
| + | </ | ||
| ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== | ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== | ||
| - | Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων | + | Επιπλέον, |
| - ως προς τον τύπο τους | - ως προς τον τύπο τους | ||
| - ως προς τον αριθμό τους και | - ως προς τον αριθμό τους και | ||
| Line 73: | Line 79: | ||
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
| - | Aν και ο compiler της Java αντιλαμβάνεται την διαφορά, | + | Δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και |
| </ | </ | ||
| - | Ας υποθέσουμε ότι έχουμε την κλάση **DrawChars** η οποία αποτελεί μέρος ενός υποθετικού προγράμματος εκτύπωσης | + | Στο |
| <code java> | <code java> | ||
| - | public class DrawChars { | + | |
| - | ... | + | origin = newOrigin; |
| - | public | + | |
| - | ... | + | |
| - | } | + | |
| - | public void draw(int i) { | + | |
| - | ... | + | |
| - | } | + | |
| - | public void draw(double f) { | + | |
| - | ... | + | |
| - | } | + | |
| - | public void draw(int i, double f) { | + | |
| - | ... | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Στην παραπάνω κλάση αν δεν είχαμε την δυνατότητα **υπερφόρτωσης** των μεθόδων της θα έπρεπε να κάνουμε κάτι σαν το παρακάτω, | + | |
| - | + | ||
| - | <code c> | + | |
| - | 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) { | + | |
| - | ... | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Υπερφόρτωση κατασκευαστών ==== | + | |
| - | + | ||
| - | Ανάλογη με την υπερφόρτωση μεθόδων είναι και η υπερφόρτωση κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα, | + | |
| - | + | ||
| - | <code java> | + | |
| - | public Rectangle(int initWidth, int initHeight, | + | |
| - | public Rectangle(int initWidth, int initHeight, int xPos, int yPos); | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | <code java Rectangle.java> | + | |
| - | 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; | + | |
| } | } | ||
| | | ||
| - | | + | |
| - | | + | |
| - | height = initHeight; | + | origin.setY(newY); |
| - | origin | + | |
| } | } | ||
| - | | ||
| - | // 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; | ||
| - | } | ||
| - | } | ||
| </ | </ | ||
| + | Παρατηρήστε ότι έχουμε δύο μεθόδους με το ίδιο όνομα, οι οποίες διαφοροποιούνται ως προς τον αριθμό και το είδος των ορισμάτων τους. __Ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου, | ||
| |Προηγούμενο: | |Προηγούμενο: | ||