This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
java:inheritance [2016/02/12 15:47] gthanos [Προσβασιμότητα των κληρονομούμενων πεδίων] |
java:inheritance [2016/02/12 15:51] gthanos [Implicit και Explicit Casting of Objects] |
||
---|---|---|---|
Line 99: | Line 99: | ||
* Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | * Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | ||
- | ===== Implicit και Explicit Casting of Objects ===== | ||
- | |||
- | Σε συνέχεια του προηγούμενου παραδείγματος κληρονομικότητας μπορούμε να γράψουμε | ||
- | |||
- | <code java> | ||
- | MountainBike myBike = new MountainBike(); | ||
- | </code> | ||
- | |||
- | Από την παραπάνω δήλωση η μεταβλητή ''myBike'' είναι τύπου ''MountainBike''. Επειδή όμως ο τύπος ''MountainBike'' κληρονομεί από την μεταβλητή ''Bicycle'' η συγκεκριμένη μεταβλητή είναι και τύπου Bicycle. Επομένως θα μπορούσαμε να γράψουμε | ||
- | |||
- | <code java> | ||
- | Bicycle myBicycle = myBike; | ||
- | //ή | ||
- | Βicycle yourBicycle = new MountainBike(); | ||
- | </code> | ||
- | |||
- | Την παραπάνω ανάθεση την ονομάζουμε //Implicit Casting// διότι αναθέτουμε μία μεταβλητή ενός τύπου δεδομένων (''myBike'') σε μία μεταβλητή γονικού τύπου δεδομένων (''myBicycle''), χωρίς type casting. | ||
- | |||
- | Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα | ||
- | |||
- | <code java> | ||
- | Bycycle myBicycle = new Bicycle(); | ||
- | MountainBike myBike = myBicycle; | ||
- | </code> | ||
- | |||
- | Σε αυτή την περίπτωση ο compiler διαμαρτύρεται, διότι η μεταβλητή ''myBicycle'' είναι τύπου ''Bicycle'' και δεν είναι απαραίτητο ότι είναι και τύπου ''MountainBike''. Αν θέλουμε να ξεπεράσουμε το παραπάνω πρόβλημα θα πρέπει να γράψουμε το εξής: | ||
- | |||
- | <code java> | ||
- | Bycycle myBicycle = new Bicycle(); | ||
- | MountainBike myBike = (MountainBike) myBicycle; | ||
- | </code> | ||
- | |||
- | Εδώ ενημερώνουμε τον compiler ότι η μεταβλητή ''myBicycle'' είναι και τύπου ''MountainBike'', λαμβάνοντας ο προγραμματιστής την ευθύνη ότι κάτι τέτοιο ισχύει. Εάν δεν ισχύει κάτι τέτοιο κατά την εκτέλεση του προγράμματος θα παραχθεί μία εξαίρεση (exception)*. Θα δούμε πιο κάτω τι είναι και πως διαχειριζόμαστε τις εξαιρέσεις. | ||
- | |||
- | Ένας πιο ασφαλής τρόπος για να επαναλάβουμε τον παραπάνω κώδικα, χωρίς να παραχθεί εξαίρεση είναι ο εξής: | ||
- | |||
- | <code java> | ||
- | Bycycle myBicycle = new Bicycle(); | ||
- | MountainBike myBike; | ||
- | if (myBicycle instanceof MountainBike) { | ||
- | myBike = (MountainBike)myBicycle; | ||
- | } | ||
- | </code> | ||
===== Final Κλάσεις και Μέθοδοι ===== | ===== Final Κλάσεις και Μέθοδοι ===== |