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 [2016/02/15 05:21]
gthanos
java:type_casting [2021/04/05 15:09]
Line 1: Line 1:
-====== Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ====== 
- 
-Σε συνέχεια του παραδείγματος κληρονομικότητας της προηγούμενης ενότητας μπορούμε να γράψουμε 
- 
-<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 cast//). 
- 
-Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα 
- 
-<code java> 
-Bycycle myBicycle = new Bicycle(); 
-MountainBike myBike = myBicycle; 
-</code> 
- 
-Σε αυτή την περίπτωση ο compiler διαμαρτύρεται, διότι η μεταβλητή ''myBicycle'' είναι τύπου ''Bicycle'' και δεν είναι απαραίτητο ότι είναι και τύπου ''MountainBike''. Αν θέλουμε να ξεπεράσουμε το παραπάνω μήνυμα λάθους του compiler θα πρέπει να γράψουμε το εξής: 
- 
-<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> 
- 
-===== Κριτήρια χρήσης της κληρονομικότητας ως εργαλείο ανάπτυξης λογισμικού ===== 
- 
-Ας επανέλθουμε στο παράδειγμα του ορθογωνίου παραλληλογράμμου το οποίο έχουμε συναντήσει αρκετές φορές στο παρελθόν και ας προσπαθήσουμε να δημιουργήσουμε την κλάση ενός [[wp>Cuboid|κυβοειδούς]] με χρήση της υφιστάμενης κλάσης του [[java:class|ορθογωνίου παραλληλογράμμου]]. 
- 
-Πριν ξεκινήσουμε την υλοποίηση θα πρέπει να αποφασίσουμε εάν θέλουμε να δημιουργήσουμε το κυβοειδές χρησιμοποιώντας ως μεταβλητή της νέας κλάσης ένα αντικείμενο της κλάσης //Rectangle// ή επιθυμούμε να επεκτείνουμε την κλάση //Rectangle// μέσω της νέας κλάσης. 
- 
-<code java Cuboid.java> 
-public class Cuboid { 
-  Rectangle rec; 
-  int length; 
-   
-  public Cuboid(int l, int w, int h) { 
-    rec = new Rectangle(w,h); 
-    length = l; 
-  } 
-   
-  public int getLength() { return length; } 
-  public void setLength(int l) { length = l; } 
-   
-  public volume() { return length * area(); } 
-} 
-</code> 
- 
-<code java Cuboid.java> 
-</code> 
- 
- 
- 
  
java/type_casting.txt · Last modified: 2021/04/05 15:09 (external edit)