This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:type_casting [2016/02/15 05:31] gthanos |
java:type_casting [2021/04/05 15:09] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ====== | ||
| - | |||
| - | Σε συνέχεια του παραδείγματος κληρονομικότητας της προηγούμενης ενότητας μπορούμε να γράψουμε | ||
| - | |||
| - | <code java> | ||
| - | MountainBike myBike = new MountainBike(); | ||
| - | </ | ||
| - | |||
| - | Από την παραπάνω δήλωση η μεταβλητή '' | ||
| - | |||
| - | <code java> | ||
| - | Bicycle myBicycle = myBike; | ||
| - | //ή | ||
| - | Βicycle yourBicycle = new MountainBike(); | ||
| - | </ | ||
| - | |||
| - | Την παραπάνω ανάθεση την ονομάζουμε άρρητη μετατροπή (//implicit casting//) διότι αναθέτουμε μία μεταβλητή ενός τύπου δεδομένων ('' | ||
| - | |||
| - | Ας δοκιμάσουμε το ανάποδο παράδειγμα τώρα | ||
| - | |||
| - | <code java> | ||
| - | Bycycle myBicycle = new Bicycle(); | ||
| - | MountainBike myBike = myBicycle; | ||
| - | </ | ||
| - | |||
| - | Σε αυτή την περίπτωση ο compiler διαμαρτύρεται, | ||
| - | |||
| - | <code java> | ||
| - | Bycycle myBicycle = new Bicycle(); | ||
| - | MountainBike myBike = (MountainBike) myBicycle; | ||
| - | </ | ||
| - | |||
| - | Εδώ ενημερώνουμε τον compiler ότι η μεταβλητή '' | ||
| - | |||
| - | Ένας πιο ασφαλής τρόπος για να επαναλάβουμε τον παραπάνω κώδικα, | ||
| - | |||
| - | <code java> | ||
| - | Bycycle myBicycle = new Bicycle(); | ||
| - | MountainBike myBike; | ||
| - | if (myBicycle instanceof MountainBike) { | ||
| - | myBike = (MountainBike)myBicycle; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Κριτήρια χρήσης της κληρονομικότητας ως εργαλείο ανάπτυξης λογισμικού ===== | ||
| - | |||
| - | Ας επανέλθουμε στο παράδειγμα του ορθογωνίου παραλληλογράμμου το οποίο έχουμε συναντήσει αρκετές φορές στο παρελθόν και ας προσπαθήσουμε να δημιουργήσουμε την κλάση ενός [[wp> | ||
| - | |||
| - | Πριν ξεκινήσουμε την υλοποίηση θα πρέπει να αποφασίσουμε εάν θέλουμε να δημιουργήσουμε το κυβοειδές χρησιμοποιώντας ως μεταβλητή της νέας κλάσης ένα αντικείμενο της κλάσης // | ||
| - | |||
| - | <code java Cuboid.java> | ||
| - | public class Cuboid { | ||
| - | Rectangle rec; | ||
| - | int length; | ||
| - | | ||
| - | public Cuboid(int l, int w, int h) { | ||
| - | rec = new Rectangle(w, | ||
| - | length = l; | ||
| - | } | ||
| - | | ||
| - | public int getLength() { return length; } | ||
| - | public void setLength(int l) { length = l; } | ||
| - | | ||
| - | public int volume() { return length * rec.area(); } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <code java Cuboid.java> | ||
| - | public class Cuboid extends Rectangle { | ||
| - | int length; | ||
| - | | ||
| - | public Cuboid(int l, int w, int h) { | ||
| - | super(w,h); | ||
| - | length = l; | ||
| - | } | ||
| - | | ||
| - | public int getLength() { return length; } | ||
| - | public void setLength(int l) { length = l; } | ||
| - | | ||
| - | public int volume() { return length * area(); } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||