This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | Previous revision Next revision Both sides next revision | ||
|
java:type_casting [2021/04/05 15:09] |
java:type_casting [2021/04/05 15:59] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ====== | ||
| + | Σε συνέχεια του παραδείγματος κληρονομικότητας της προηγούμενης ενότητας μπορούμε να γράψουμε | ||
| + | |||
| + | <code java> | ||
| + | Rectangle r1 = new Rectangle(100, | ||
| + | </ | ||
| + | |||
| + | Από την παραπάνω δήλωση η μεταβλητή '' | ||
| + | |||
| + | <code java> | ||
| + | BasicRectangle r2 = r1; | ||
| + | //ή ισοδύναμα | ||
| + | BasicRectangle r2 = new Rectangle(100, | ||
| + | </ | ||
| + | |||
| + | Την παραπάνω ανάθεση την ονομάζουμε άρρητη μετατροπή (//implicit casting//) διότι αναθέτουμε ένα αντικείμενο του κληρονομούμενου τύπου δεδομένων ('' | ||
| + | |||
| + | Αν θέλουμε να ζωγραφίσουμε τον κώδικα του προηγούμενου παραδείγματος μπορούμε να το κάνουμε όπως στο παρακάτω σχήμα. Παρατηρήστε ότι η μεταβλητές **r1** και **r2** δείχνουν στο ίδιο αντικείμενο. Η διαφορά είναι ότι η **r2** αν και δείχνει σε ένα αντικείμενο τύπου **Rectangle**, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | === Ρητή μετατροπή === | ||
| + | |||
| + | Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα | ||
| + | |||
| + | <code java> | ||
| + | BasicRectangle r3 = new Rectangle(100, | ||
| + | Rectangle r4 = r3; | ||
| + | </ | ||
| + | |||
| + | Σε αυτή την περίπτωση ο // | ||
| + | |||
| + | <code java> | ||
| + | BasicRectangle r3 = new Rectangle(100, | ||
| + | Rectangle r4 = (Rectangle)r3; | ||
| + | </ | ||
| + | |||
| + | Σε αυτή την περίπτωση ο προγραμματιστής βεβαιώνει τον // | ||
| + | |||
| + | Ένας πιο ασφαλής τρόπος για να επαναλάβουμε τον παραπάνω κώδικα, | ||
| + | |||
| + | <code java> | ||
| + | BasicRectangle r3 = new Rectangle(100, | ||
| + | Rectangle r4; | ||
| + | if (r3 instanceof Rectangle) { | ||
| + | r4 = (Rectangle)r3; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |Προηγούμενο: | ||