This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:class [2015/02/18 09:00] gthanos [Ο κατασκευαστής της υποκλάσης] |
java:class [2016/03/04 17:45] doufexi |
||
---|---|---|---|
Line 7: | Line 7: | ||
- **μεθόδους (methods)** | - **μεθόδους (methods)** | ||
- | Σε προηγούμενα παραδείγματα χρησιμοποιήσαμε την κλάση του ποδηλάτου ''Bicycle''. Παρακάτω ορίζουμε την κλάση αυτή. | + | Για τις ανάγκες του παρόντος κεφαλαίου θα ορίσουμε την κλάση **Rectangle** που απεικονίζει ένα ορθογώνιο παραλληλόγραμμο. Παρακάτω ορίζουμε την κλάση αυτή με χρήση δύο παραμέτρων, το πλάτος και το ύψος του ορθογωνίου. |
+ | |||
+ | <code java Rectangle.java> | ||
+ | |||
+ | public class Rectangle { | ||
+ | |||
+ | // the Rectangle class has 2 fields | ||
+ | public int width; | ||
+ | public int height; | ||
+ | |||
+ | // the Rectangle class has one constructor | ||
+ | public Rectangle(int initWidth, int initHeight) { | ||
+ | width = initWidth; | ||
+ | height = initHeight; | ||
+ | } | ||
+ | |||
+ | public void setWidth(int newWidth ) { | ||
+ | width = newWidth; | ||
+ | } | ||
+ | |||
+ | public void setHeight(int newHeight ) { | ||
+ | height = newHeight; | ||
+ | } | ||
+ | |||
+ | public int getWidth() { | ||
+ | return width; | ||
+ | } | ||
+ | |||
+ | public int getHeight() { | ||
+ | return height; | ||
+ | } | ||
+ | |||
+ | public int area() { | ||
+ | return width * height; | ||
+ | } | ||
- | <code java Bicycle.java> | ||
- | public class Bicycle { | ||
- | | ||
- | // the Bicycle class has | ||
- | // three fields | ||
- | public int cadence; | ||
- | public int gear; | ||
- | public int speed; | ||
- | | ||
- | // the Bicycle class has | ||
- | // one constructor | ||
- | public Bicycle(int startCadence, int startSpeed, int startGear) { | ||
- | gear = startGear; | ||
- | cadence = startCadence; | ||
- | speed = startSpeed; | ||
- | } | ||
- | | ||
- | // the Bicycle class has | ||
- | // four methods | ||
- | public void setCadence(int newValue) { | ||
- | cadence = newValue; | ||
- | } | ||
- | | ||
- | public void setGear(int newValue) { | ||
- | gear = newValue; | ||
- | } | ||
- | | ||
- | public void applyBrake(int decrement) { | ||
- | speed -= decrement; | ||
- | } | ||
- | | ||
- | public void speedUp(int increment) { | ||
- | speed += increment; | ||
- | } | ||
- | | ||
} | } | ||
</code> | </code> | ||
- | Παρατηρήστε ότι η παραπάνω κλάση αποτελείται από δεδομένα (τις μεταβλητές ''cadence'', ''gear'', ''speed'') και τις παρακάτω μεθόδους. | + | Παρατηρήστε ότι η παραπάνω κλάση αποτελείται από τα πεδία: |
+ | * την μεταβλητή **width** που συμβολίζει το πλάτος του παραλληλογράμμου. | ||
+ | * την μεταβλητή **height** που συμβολίζει το ύψος του παραλληλογράμμου. | ||
+ | |||
+ | και τις παρακάτω μεθόδους: | ||
<code java> | <code java> | ||
- | public void setCadence(int newValue); | + | public void setWidth(int newWidth ); |
- | public void setGear(int newValue); | + | public void setHeight(int newHeight ); |
- | public void setGear(int newValue); | + | public int getWidth(); |
- | public void applyBrake(int decrement); | + | public int getHeight(); |
- | public void speedUp(int increment); | + | public int area(); |
</code> | </code> | ||
- | Προς το παρόν αγνοήστε τον προσδιοριστεί **public**, το οποίο θα εξετάσουμε στην συνέχεια. | + | Προς το παρόν αγνοήστε τον προσδιοριστή **public** μπροστά από τα πεδία και τις μεθόδους, τον οποίο θα εξετάσουμε στην συνέχεια. |
===== Ο κατασκευαστής της κλάσης ===== | ===== Ο κατασκευαστής της κλάσης ===== | ||
Line 63: | Line 66: | ||
<code java> | <code java> | ||
- | public Bicycle(int startCadence, int startSpeed, int startGear); | + | public Rectangle(int setWidth, int setHeight); |
</code> | </code> | ||
- | Η "ειδική" αυτή μέθοδος αποτελεί τον κατασκευαστή της κλάσης. Ο κατασκευαστής της κλάσης έχει τις εξής δύο αρμοδιότητες: | + | Η "ειδική" αυτή μέθοδος αποτελεί τον κατασκευαστή της κλάσης. Ο κατασκευαστής της κλάσης έχει τις εξής αρμοδιότητες: |
- | - Δεσμεύει την απαραίτητη μνήμη για τα αντικείμενα της κλάσης. | + | - Δεσμεύει την απαραίτητη μνήμη για την αποθήκευση του αντικειμένου που δημιουργείται. |
- Αρχικοποιεί τα δεδομένα ενός αντικειμένου, εφόσον διαθέτει τυπικές παραμέτρους και σώμα (σώμα μιας μεθόδου εννοούμε το τμήμα του κώδικα μέσα στις αγκύλες **{}** ). | - Αρχικοποιεί τα δεδομένα ενός αντικειμένου, εφόσον διαθέτει τυπικές παραμέτρους και σώμα (σώμα μιας μεθόδου εννοούμε το τμήμα του κώδικα μέσα στις αγκύλες **{}** ). | ||
+ | - Επιστρέφει ένα δείκτη στην αρχή της περιοχής που έχει δημιουργηθεί το νέο αντικείμενο της κλάσης. Υπό αυτή την έννοια, η μεταβλητή του κάθε αντικειμένου είναι ένας δείκτης (αναφορά) που δείχνει στο νέο αντικείμενο. | ||
- | Αν και ο κατασκευαστής της κλάσης δεν έχει επιστρεφόμενο τύπο, στη πράξη επιστρέφει ένα αντικείμενο (ή __πιο σωστά__ τη διεύθυνση ενός αντικειμένου) του τύπου της κλάσης στην οποία αντιστοιχεί. | + | <WRAP tip 80% center round> |
+ | Η κάθε κλήση του κατασκευαστή της κλάσης δημιουργεί και επιστρέφει ένα αντικείμενο σε κάθε κλήση του. | ||
- | <WRAP tip> | + | Κάθε κλάση έχει τουλάχιστον ένα κατασκευαστή (**//μπορεί να έχει και περισσότερους//**).__Εάν δεν έχει οριστεί κατασκευαστής σε μία κλάση __o compiler ορίζει ένα κατασκευαστή χωρίς τυπικές παραμέτρους και χωρίς εντολές μέσα στο κυρίως σώμα. Ο κατασκευαστής αυτός ονομάζεται **βασικός κατασκευαστής της κλάσης** (default constructor) Για την παραπάνω κλάση Rectangle ο βασικός κατασκευαστής θα ήταν o εξής: |
- | Κάθε κλάση έχει τουλάχιστον ένα κατασκευαστή (μπορεί να έχει και περισσότερους).__Εάν δεν έχει οριστεί κατασκευαστής σε μία κλάση__ o compiler ορίζει ένα κατασκευαστή χωρίς τυπικές παραμέτρους και χωρίς εντολές μέσα στο κυρίως σώμα. Για την παραπάνω κλάση Bicycle ο default κατασκευαστής θα ήταν o εξής: | + | |
<code java> | <code java> | ||
- | public Bicycle() { | + | public Rectangle() { |
} | } | ||
</code> | </code> | ||
</WRAP> | </WRAP> | ||
+ | /* | ||
====== Κληρονομικότητα Κλάσης ====== | ====== Κληρονομικότητα Κλάσης ====== | ||
Line 192: | Line 197: | ||
<WRAP tip> | <WRAP tip> | ||
- | Αν δεν κληθεί κανένας κατασκευστής από τον προγραμματιστή και ο compiler δεν βρει τον default κατασκευαστή της γονικής κλάσης τότε θα εμφανίσει ένα μήνυμα λάθους της μορφής. | + | Αν δεν κληθεί κανένας κατασκευαστής από τον προγραμματιστή και ο compiler δεν βρει τον default κατασκευαστή της γονικής κλάσης τότε θα εμφανίσει ένα μήνυμα λάθους της μορφής. |
<code> | <code> | ||
error: no suitable constructor found for Bicycle (no arguments) | error: no suitable constructor found for Bicycle (no arguments) | ||
</code> | </code> | ||
- | Συνηπώς, η αρχικοποίηση του αντικειμένου αποτελεί ευθύνη του προγραμμαστιστή ο οποίος θα πρέπει να φροντίστει είτε να καλέσει τον κατασκευαστή της γονικής κλάσης ή να βεβαιώσει ότι θα υπάρχει ο default κατασκευαστής. | + | Συνηπώς, η αρχικοποίηση του αντικειμένου αποτελεί ευθύνη του προγραμματιστή ο οποίος θα πρέπει να φροντίσει είτε να καλέσει τον κατασκευαστή της γονικής κλάσης ή να βεβαιώσει ότι θα υπάρχει ο default κατασκευαστής. |
</WRAP> | </WRAP> | ||
Line 212: | Line 217: | ||
} | } | ||
</code> | </code> | ||
- | δηλαδή η αντικατάσταση του κώδικα που περιέχει ο κατασκευστής της γονικής κλάσης μέσα στον κατασκευαστή της υποκλάσης **__δεν αναιρεί__** την ανάγκη να εκτελεστεί πρώτα ο default κατασκευαστής της γονικής κλάσης. | + | δηλαδή η αντικατάσταση του κώδικα που περιέχει ο κατασκευαστής της γονικής κλάσης μέσα στον κατασκευαστή της υποκλάσης **__δεν αναιρεί__** την ανάγκη να εκτελεστεί πρώτα ο default κατασκευαστής της γονικής κλάσης. |
+ | */ | ||
- | |Προηγούμενο: [[:java:install| Εγκατάσταση Java]] | Επόμενο: [[:java:class_fields | Τα πεδία (δεδομενα) της κλάσης]]| | + | |Προηγούμενο: [[:java:break_loop_statements | |
+ | Εντολές τερματισμού και ελέγχου της ανακύκλωσης]] | [[:toc | Περιεχόμενα]] | Επόμενο: [[:java:class_fields | Τα πεδία (δεδομένα) της κλάσης]]| | ||