ΕΙΣΑΓΩΓΗ
Στο σημερινό δωρεάν μάθημα Java
θα δούμε ποια είναι η δεύτερη χρήση του this
και πως αυτή συνδυάζεται με τους constructors.
Είχαμε ήδη αναλύσει σε προηγούμενη ενότητα
γιατί και πως χρησιμοποιούμε το this μέσα σε μια μέθοδο ή έναν constructor για
να καλέσουμε instance variables. Όμως η χρήση του this δεν περιορίζεται μόνο σε
αυτό. Υπάρχει μια επιπλέον δυνατότητα που μας επιτρέπει να καλέσουμε έναν
constructor από έναν άλλο constructor.
COMMON USE OF THIS
Πριν όμως χρησιμοποιούμε αυτή την
ιδιότητα του this, ας δούμε ένα παράδειγμα μιας κλάσης όπως ξέρουμε να την
δημιουργούμε με την θεωρία που γνωρίζουμε μέχρι τώρα.
SeatReservation.java
Αυτή η απλή μορφή κλάσης μπορεί
να είναι μέλος μιας μεγαλύτερης εφαρμογής reservation αεροπορικών εισιτηρίων. Η
κλάση προσφέρει τρεις διαφορετικούς constructors μέσα από τους οποίους μπορούμε
να δημιουργήσουμε τα αντικείμενα μας. Αυτό όμως που ζητάμε από τους
constructors, ανεξάρτητα ποιον θα διαλέξει ο χρήστης για να δημιουργήσει το
αντικείμενο, είναι να δώσουμε κάποιες αρχικές τιμές ακόμα και όταν καλέσουμε
τον no-argument constructor. Αργότερα θα μπορούσαμε να κάνουμε έναν έλεγχο αν η
θέση είναι ήδη reserved, αλλά ας κρατήσουμε τον κώδικα μας σε απλά επίπεδα.
Αυτό που παρατηρούμε σχεδόν αμέσως, είναι ότι
ο κώδικας στους constructors επαναλαμβάνεται τρεις φορές. Εάν για κάποιο λόγο
χρειαστεί να κάνουμε κάποια αλλαγή, θα πρέπει να αλλάξουμε και τους τρεις constructors.
Αυτή η προσέγγιση δεν είναι και τόσο επιθυμητή γιατί σίγουρα περιλαμβάνει ένα
μεγάλο ρίσκο λάθους.
CALLING A CONSTRUCTOR WITH THIS
Για να αποφύγουμε λοιπόν αυτή την επανάληψη
στον κώδικα, μπορούμε να δημιουργήσουμε έναν constructor που έχει όλες τις
λεπτομέρειες που χρειαζόμαστε και όλοι οι υπόλοιποι constructors της κλάση να
καλούν αυτόν. Για να καλέσει λοιπόν ένας constructor έναν άλλο constructor
χρησιμοποιούμε την λέξη this.
Ο compiler της java απαιτεί όμως η χρήση του this μέσα σε έναν constructor να
είναι η πρώτη γραμμή του κώδικα του. Εάν δεν είναι, τότε θα έχουμε compiler
error.
Ας δούμε λοιπόν πως θα μπορούσαμε να
αλλάξουμε τον κώδικα της προηγούμενης κλάσης έτσι ώστε να χρησιμοποιεί το this
για να καλέσει ένας constructor έναν άλλον constructor μέσα στην ίδια κλάση.
SeatReservation.java
Όπως βλέπεται η λογική είναι πάρα
πολύ απλή. Αν ο προγραμματιστής καλέσει τον no-argument constructor για να
δημιουργήσει έναν αντικείμενο, ο no-argument constructor θα καλέσει εκείνον τον
constructor που δέχεται δύο τιμές (δηλαδή τον τρίτο) και θα του περάσει τις δύο
τιμές μέσα στην παρένθεση. Αν πάλι καλέσει τον δεύτερο constructor, εκείνος
πάλι θα καλέσει τον τρίτο, περνώντας του δύο τιμές – μια που δέχτηκε από τον
χρήστη και μια σταθερή από τον κώδικα. Τέλος ο τρίτος constructor είναι στην
ουσία εκείνος που κάνει όλη την δουλειά. Αν το καλέσουμε θα χρειαστεί δύο τιμές
για να δημιουργήσει το αντικείμενο.
Ας δούμε και την κλάση μέσα από την οποία
δημιουργούμε αυτά τα αντικείμενα.
ReservationDemo.java
Output
Instantiating first Seat Reservation
Inside two-arg constructor
Inside no-arg constructor
4 C
Instantiating second Seat Reservation
Inside two-arg constructor
Inside one-arg constructor
4 B
Instantiating third Seat Reservation
Inside two-arg constructor
23 D
Από το αποτέλεσμα που βλέπουμε μετά το πέρας εκτέλεσης του
προγράμματος επιβεβαιώνεται η θεωρία μας. Ας αναλύσουμε τι ακριβώς γίνεται όταν
καλέσουμε τον no-argument constructor. Όταν λοιπόν πάμε να δημιουργήσουμε ένα
αντικείμενο καλώντας τον no-argument constructor, η java θα πάει στην κλάση και
μετά στον συγκεκριμένο constructor για να εκτελέσει τον κώδικα του. Η πρώτη
γραμμή όμως είναι το this("C",
4); που σημαίνει ότι καλεί τον τρίτο constructor
- δηλαδή εκείνον που δέχεται δύο τιμές. Τώρα η java μεταφέρεται στον τρίτο
constructor και εκτελεί τον κώδικα του. Αυτό άλλωστε φαίνεται από το μήνυμα Inside
two-arg constructor. Όταν ολοκληρωθεί ο κώδικας του τρίτου
constructor, ο έλεγχος του προγράμματος επιστρέφει πίσω στον no-argument
constructor γιατί η εκτέλεση αυτού του κώδικα ακόμα δεν έχει ολοκληρωθεί.
Ολοκληρώνεται με το μήνυμα Inside no-arg
constructor.
Μην ξεχάσετε να κάνετε ένα μικρό donation έτσι ώστε αυτό το blog να μεγαλώσει ακόμα πιο πολύ και να έχει περισσότερες
δυνατότητες στην online παράδοση
δωρεάν μαθημάτων.
full-width
0 Comments
Η γνώμη σας είναι σημαντική.