BETA

Μαθαίνοντας την Java- OVERLOADING METHODS & PROVIDING CONSTRUCTORS [μαθήματα 25 & 26]

Εικόνα Michail

java

Συνέχεια μαθημάτων για την Java και σήμερα μιλάμε για OVERLOADING METHODS & PROVIDING CONSTRUCTORS FOR YOUR CLASSES.

JAVA LESSON 25 – OVERLOADING METHODS

Στο σημερινό μάθημα θα δούμε πως η Java επιτρέπει μια μέθοδο να είναι overloaded, δηλαδή να εμφανίζεται πολλαπλές φορές στην ίδια κλάση με το ίδιο όνομα. Οι μέθοδοι, αν και έχουν το ίδιο όνομα, διαφέρουν μεταξύ τους στην λίστα και στο είδος των παραμέτρων. Αν και μπορεί να μην σας φαίνεται απαραίτητη μια τέτοια τακτική, είναι όμως πολύ συνηθισμένη στην ίδια την Java (π.χ constructors) όπως θα δούμε στην συνέχεια των μαθημάτων μας. Βρισκόμαστε στην ενότητα Overloading Methods από το java tutorial.

Οι overloading μέθοδοι είναι απαραίτητη προϋπόθεση όχι μόνο για την δημιουργία constructors (για τους οποίους θα μιλήσουμε πολύ σύντομα) αλλά και για την ίδια την java, και αυτό μπορούμε πολύ εύκολα να το αποδείξουμε γράφοντας την εντολή System.out. και μετά την τελεία σταματάμε και βλέπουμε τις προτεινόμενες εντολές από το NetBeans.

1

Όπως βλέπεται στο πιο πάνω παράδειγμα, όταν το NetBeans μας προτείνει πια μπορεί να είναι η πιθανή εντολή που θα τυπώσουμε αμέσως μετά από το System.out. εμφανίζεται μια λίστα με πολλαπλές επιλογές print και println. Εδώ έχουμε μια ξεκάθαρη περίπτωση overloading. Ας δούμε όμως μέσα από ένα παράδειγμα την συμπεριφορά ενός προγράμματος που περιέχει overloading methods.

Δημιουργούμε δύο κλάσεις. Η μια περιέχει τις overloading methods και ονομάζεται Calculator όπως δείχνει η πιο κάτω εικόνα:

2

Η θεωρία μας επιτρέπει να κάνουμε μια method overload αρκεί οι παράμετροι να διαφέρουν από μέθοδο σε μέθοδο έτσι ώστε να μπορεί ο compiler να ξεχωρίσει ποια μέθοδο κάθε φορά προσπαθούμε να καλέσουμε. Η διαφοροποίηση στις παραμέτρους μπορεί να έχει πολλές μορφές όπως διαφορετικό αριθμό μεταβλητών, διαφορετικό data type, ή και τα δύο. Στο πιο πάνω παράδειγμα, κρατήσαμε τον ίδιο αριθμό μεταβλητών αλλά κάθε φορά αλλάζει το data type των μεταβλητών. Δεν αρκεί για τον compiler να κρατήσετε τον αριθμό των μεταβλητών και το data type ίδιο και απλά να αλλάζετε το return data type της μεθόδου. Έχουμε λοιπόν στην κλάση Calculator τρεις μεθόδους με το ίδιο όνομα, το ίδιο αριθμό παραμέτρων αλλά με διαφορετικό data type στις παραμέτρους. Για παράδειγμα, η πρώτη μέθοδο δέχεται δυο int αριθμούς, ενώ η δεύτερη μέθοδο δύο double αριθμούς. Το εντυπωσιακό αυτής της διαδικασίας είναι όταν εκτελούμε το πρόγραμμα και καλούμε την κλάση Calculator. Ας φτιάξουμε λοιπόν μια ακόμα κλάση με το όνομα OverloadDemo που περιέχει την εκτελέσιμη μέθοδο main και περιέχει τον εξής κώδικα:

3

intAnswer =calc.multiply(a,b);

Αφού δημιουργήσουμε ένα αντικείμενο με όνομα calc από την κλάση Calculator ερχόμαστε να τρέξουμε την μέθοδο multiply. Ποια όμως από όλες τις μεθόδους θα τρέξει? Αυτό εξαρτάται από τις τιμές που θα εισάγουμε. Στην πρώτη περίπτωση, οι μεταβλητές a και b έχουν οριστεί σαν int. Οπότε το αντικείμενο calc θα καλέσει εκείνη την μέθοδο από την κλάση Calculator που δέχεται δύο int τιμές σαν παράμετρούς. Η επιλογή γίνεται αυτόματα αρκεί εμείς να δώσουμε το σωστό input.

Το αποτέλεσμα εκτέλεσης του προγράμματος εμφανίζεται στην πιο κάτω εικόνα.

6

Με αυτή την μικρή ανάλυση στις overloaded methods μπορούμε από το επόμενο μάθημα να προχωρήσουμε στους constructors που είναι οι κύριοι δημιουργοί αντικειμένων.

ch1

JAVA LESSON 25 – PROVIDING CONSTRUCTORS FOR YOUR CLASSES

Στο σημερινό μάθημα java θα μιλήσουμε για τους constructors μέσω των οποίων κατασκευάζονται τα αντικείμενα. Βρισκόμαστε στο κεφάλαιο “Providing Constructors for your Classes” από το online tutorial τηςOracle (Στο σημερινό μάθημα java θα μιλήσουμε για τους constructors μέσω των οποίων κατασκευάζονται τα αντικείμενα. Βρισκόμαστε στο κεφάλαιο “Providing Constructors for your Classes” από το online tutorial τηςOracle.

Οι constructors, όποτε τους καλέσουμε, δημιουργούν ένα καινούργιο αντικείμενο και δίνουν αρχικές τιμές στις μεταβλητές που περιέχει το αντικείμενο. Σκοπός των constructors είναι να δημιουργούν ένα καινούργιο αντικείμενο με μια αρχική κατάσταση όποτε καλούμε την new εντολή. Μέχρι τώρα, ίσως να μην το είχατε καταλάβει, αλλά χρησιμοποιούσατε constructors και καλούσατε τον new operator για να δημιουργήσετε ένα αντικείμενο.

1

Ο κώδικας new Bicycle( ) είναι χρήση του constructor για να δημιουργηθεί ένα καινούργιο αντικείμενο από την κλάση Bicycle. Αν προσέξετε λίγο τον κώδικα, θα δείτε ότι ένας constructor μοιάζει στην μορφή με μια μέθοδο όμως διαφέρει στα εξής παρακάτω σημαντικά σημεία:

Οι constructors έχουν πάντα το ίδιο όνομα με την κλάση
Επιτρέπεται να έχουμε constructor overloading (δηλαδή πολλαπλούς constructors με το ίδιο όνομα αλλά διαφορετικά signatures όπως ακριβώς είδαμε στο Java Lesson 24 (http://www.kassapoglou.com/java-lesson-24-overloading-methods/) με τις Overloaded methods.
Οι constructors δεν είναι methods όσο και αν μοιάζουν
Τέλος, οι constructors δεν γυρνάνε ποτέ τιμή στο πρόγραμμα, ούτε καν void

Βλέποντας για άλλη μια φορά την γραμμή κώδικα

Bicycle bike1 = new Bicycle();

Μπορούμε τώρα να καταλάβουμε ότι το new Bicycle( ) είναι ο constructor που ενεργοποιείται και δημιουργεί ένα αντικείμενο από την κλάση Bicycle, ενώ στον κώδικα Bicyclebike1 το bike1 είναι ένα reference στο αντικείμενο new Bicycle και μάλιστα είναι είδος Bicycle.

Όταν δεν έχουμε γράψει δικό μας κώδικα για constructor, τότε η Java αυτόματα μας προσφέρει έναν constructor που δεν δέχεται μεταβλητές και ο οποίος ονομάζεται ο no-argument constructor. Όπως ήδη έχουμε δει, ο no-argument constructor (επειδή στην παρένθεση του δεν δέχεται μεταβλητές) δεν μπορεί να κάνει και πολλά πράγματα εκτός από το να δημιουργήσει το αντικείμενο.

Η πιο επιθυμητή, και αναγκαία κατά κάποιο τρόπο προσέγγιση, είναι να δημιουργήσουμε δικού μας constructors έτσι ώστε να μπορούμε να δίνουμε και αρχικές τιμές στα αντικείμενα που δημιουργούμε.

Ας αλλάξουμε λοιπόν λίγο τον κώδικα που της κλάσης Bicycle έτσι ώστε να περιέχει τον δικό μας constructor. Το πιο κάτω παράδειγμα σας δείχνει το μέρος του κώδικα που αναφέρεται στον constructor.

2

Ας γυρίσουμε λίγο πίσω και ας μιλήσουμε λίγο ακόμα για τον default ή αλλιώς no-argument constructor. Ο default constructor αν και δεν δέχεται παραμέτρους και να δεχτεί από τον χρήστη αρχικές τιμές, παρόλα αυτά δίνει μηδενικές τιμές στις μεταβλητές όπως σας δείχνει και ο παρακάτω πίνακας:

3

Ίσως θέλουμε να δώσουμε την ευκαιρία στον χρήστη να έχει πολλαπλές επιλογές για την δημιουργία ενός αντικειμένου από μια συγκεκριμένη κλάση. Στο δικό μας παράδειγμα θα μπορούσαμε να δώσουμε την επιλογή στον χρήστη να μπορεί να καλέσει και τον no-argument εκτός από τον ήδη υπάρχον constructor. Επειδή όμως η java μας πήρε πίσω τον default constructor, θα πρέπει να τον γράψουμε εμείς. Το πιο κάτω παράδειγμα δείχνει την Bicycle που περιέχει δύο constructors:

5

Αν και ορίζουμε no-argument constructor, όταν το καλέσουμε το αντικείμενο θα έχει κάποιες αρχικές τιμές που του δίνουμε. Στο παρακάτω κώδικα, βλέπουμε τις επιλογές που έχουμε για να δημιουργήσουμε αντικείμενο:

5

Εδώ βλέπουμε ξεκάθαρα πως η θεωρία του Overloading στις μεθόδους εφαρμόζεται τέλεια και στους constructors. Έχουμε δηλαδή πολλαπλούς constructors με το ίδιο όνομα με διαφορετική λίστα μεταβλητών ο καθένας. Έτσι μπορεί να τους ξεχωρίσει και να τους ελέγξει και η πλατφόρμα της java.

Στο σημερινό Java μάθημα μιλήσαμε για τους constructors και πως δημιουργούμε δικούς μας για να έχουμε περισσότερες επιλογές στην δημιουργία αντικειμένων.

>>> Δείτε όλη την σειρά των μαθημάτων Java.

Μιχάλης Κασάπογλου(http://kassapoglou.com)

  • Σχόλια

0 Comments:

Scroll to Top