java:class_methods
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:class_methods [2017/02/16 10:14] – gthanos | java:class_methods [2022/02/23 10:00] (current) – [Παραδείγματα μεθόδων] gthanos | ||
---|---|---|---|
Line 22: | Line 22: | ||
- setLatitude | - setLatitude | ||
- isEmpty | - isEmpty | ||
- | - H λίστα των παραμέτρων μέσα σε παρένθεση, | ||
- | - Μία σειρά από Exceptions (θα συζητηθούν αργότερα). | ||
- | - Το κυρίως σώμα της μεθόδου, | ||
===== Παραδείγματα μεθόδων ===== | ===== Παραδείγματα μεθόδων ===== | ||
- | **Οι μέθοδοι της κλάσης έχουν | + | Με βάση |
<code java> | <code java> | ||
- | public | + | class Rectangle { |
- | | + | |
- | | + | // the Rectangle class has 3 fields |
- | + | int width; | |
- | public Rectangle(int initWidth, int initHeight) { | + | int height; |
+ | Point origin; | ||
+ | |||
+ | // the Rectangle class has one constructor | ||
+ | public Rectangle(int initWidth, int initHeight, Point initOrigin) { | ||
width = initWidth; | width = initWidth; | ||
height = initHeight; | height = initHeight; | ||
+ | origin = initOrigin; | ||
} | } | ||
- | + | ||
- | | + | void setWidth(int newWidth ) { |
- | public void setHeight(int newHeight ) { height = newHeight; } | + | width = newWidth; |
- | public int getWidth() { return width; | + | |
- | public int getHeight() { return height; | + | |
- | public void resize(int dw, int dh) { | + | |
- | width += dw; height += dh; | + | |
} | } | ||
- | public | + | |
+ | void setHeight(int newHeight ) { | ||
+ | height = newHeight; | ||
+ | } | ||
+ | |||
+ | Point getOrigin() { | ||
+ | | ||
+ | } | ||
+ | |||
+ | void setOrigin(int newX, int newY) { | ||
+ | origin.setX(newX); | ||
+ | origin.setY(newY); | ||
+ | } | ||
+ | |||
+ | void setOrigin(Point newOrigin) { | ||
+ | origin = newOrigin; | ||
+ | | ||
+ | | ||
} | } | ||
</ | </ | ||
+ | |||
+ | <WRAP important 80% center round> | ||
+ | Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι ότι οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης. Στο παραπάνω παράδειγμα, | ||
+ | </ | ||
===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== | ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== | ||
- | Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων | + | Επιπλέον, |
- ως προς τον τύπο τους | - ως προς τον τύπο τους | ||
- ως προς τον αριθμό τους και | - ως προς τον αριθμό τους και | ||
Line 60: | 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; | ||
- | } | ||
- | } | ||
</ | </ | ||
+ | Παρατηρήστε ότι έχουμε δύο μεθόδους με το ίδιο όνομα, οι οποίες διαφοροποιούνται ως προς τον αριθμό και το είδος των ορισμάτων τους. __Ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου, | ||
|Προηγούμενο: | |Προηγούμενο: | ||
java/class_methods.1487240051.txt.gz · Last modified: 2017/02/16 10:14 (external edit)