User Tools

Site Tools


java:type_casting

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:type_casting [2021/03/05 15:40]
gthanos
java:type_casting [2021/04/05 15:09]
Line 1: Line 1:
-====== Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ====== 
  
-Σε συνέχεια του παραδείγματος κληρονομικότητας της προηγούμενης ενότητας μπορούμε να γράψουμε 
- 
-<code java> 
-Rectangle r1 = new Rectangle(100,100,5,-5); 
-</code> 
- 
-Από την παραπάνω δήλωση η μεταβλητή ''r1'' είναι τύπου ''MountainBike''. Επειδή όμως ο τύπος ''Rectangle'' κληρονομεί από την μεταβλητή ''BasicRectangle'' **__η συγκεκριμένη μεταβλητή είναι και τύπου BasicRectangle**. Επομένως, θα μπορούσαμε να γράψουμε 
- 
-<code java> 
-BasicRectangle r2 = r1; 
-   //ή ισοδύναμα 
-BasicRectangle r2 = new Rectangle(100,100,5,-5); 
-</code> 
- 
-Την παραπάνω ανάθεση την ονομάζουμε άρρητη μετατροπή (//implicit casting//) διότι αναθέτουμε μία μεταβλητή του κληρονομούμενου τύπου δεδομένων (''r1'') σε μία μεταβλητή του γονικού τύπου (''r2''), χωρίς να ορίζουμε μία μετατροπή τύπου. 
- 
-Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα 
- 
-<code java> 
-BasicRectangle r3 = new BasicRectangle(100,200); 
-Rectangle r4 = r3; 
-</code> 
- 
-Σε αυτή την περίπτωση ο compiler διαμαρτύρεται, διότι η μεταβλητή ''r3'' είναι τύπου ''BasicRectangle'' και δεν είναι απαραίτητο ότι είναι και τύπου ''Rectangle''. Αν θέλουμε να ξεπεράσουμε το παραπάνω μήνυμα λάθους του compiler θα πρέπει να γράψουμε το εξής: 
- 
-<code java> 
-BasicRectangle r3 = new BasicRectangle(100,200); 
-Rectangle r4 = (BasicRectangle)r3; 
-</code> 
- 
-Εδώ ενημερώνουμε τον compiler ότι η μεταβλητή ''r4'' είναι και τύπου ''Rectangle''. Ο προγραμματιστής βεβαιώνει ότι αυτό ισχύει. Την παραπάνω ανάθεση την ονομάζουμε ρητή μετατροπή (//explicit casting//). Επειδή δεν ισχύει η παραπάνω μετατροπή, κατά την εκτέλεση του προγράμματος θα παραχθεί μία εξαίρεση (//exception//). Θα δούμε πιο κάτω τι είναι οι εξαιρέσεις και πως τις διαχειριζόμαστε. 
- 
-Ένας πιο ασφαλής τρόπος για να επαναλάβουμε τον παραπάνω κώδικα, χωρίς να παραχθεί εξαίρεση είναι ο εξής: 
- 
-<code java> 
-BasicRectangle r3 = new BasicRectangle(100,200); 
-Rectangle r4 = null; 
-if (r3 instanceof Rectangle) { 
-    r4 = (Rectangle)r3; 
-} 
-</code> 
- 
-|Προηγούμενο: [[ :java:inheritance | Κληρονομικότητα ]] | [[:toc | Περιεχόμενα]] | Επόμενο: [[ :java:inheritance_subclassing_vs_encapsulating | Κριτήριo χρήσης της κληρονομικότητας ]]| 
java/type_casting.txt · Last modified: 2021/04/05 15:09 (external edit)