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:38] gthanos [Κριτήρια χρήσης της κληρονομικότητας ως εργαλείο ανάπτυξης λογισμικού] |
java:type_casting [2017/02/16 13:34] (current) gthanos |
||
---|---|---|---|
Line 43: | Line 43: | ||
</code> | </code> | ||
- | ===== Κριτήρια χρήσης της κληρονομικότητας ως εργαλείο ανάπτυξης λογισμικού ===== | + | |Προηγούμενο: [[ :java:inheritance | Κληρονομικότητα ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:inheritance_subclassing_vs_encapsulating | Κριτήριo χρήσης της κληρονομικότητας]]| |
- | + | ||
- | Ας επανέλθουμε στο παράδειγμα του ορθογωνίου παραλληλογράμμου το οποίο έχουμε συναντήσει αρκετές φορές στο παρελθόν και ας προσπαθήσουμε να δημιουργήσουμε την κλάση ενός [[wp>Cuboid|κυβοειδούς]] με χρήση της υφιστάμενης κλάσης του [[java:class|ορθογωνίου παραλληλογράμμου]]. | + | |
- | + | ||
- | Πριν ξεκινήσουμε την υλοποίηση θα πρέπει να αποφασίσουμε εάν θέλουμε να δημιουργήσουμε το κυβοειδές χρησιμοποιώντας ως μεταβλητή της νέας κλάσης ένα αντικείμενο της κλάσης //Rectangle// ή επιθυμούμε να επεκτείνουμε την κλάση //Rectangle// μέσω της νέας κλάσης. Δείτε παρακάτω τις δύο παραλλαγές της κλάσης //Cuboid// με και χωρίς κληρονομικότητα. | + | |
- | + | ||
- | <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 int volume() { return length * rec.area(); } | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | ή | + | |
- | + | ||
- | <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(); } | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | Και οι δύο κλάσεις μεταγλωττίζονται και λειτουργικά παράγουν το ίδιο αποτέλεσμα. Το ερώτημα είναι ποια από τις δύο μεθόδους θα προτιμήσουμε. Η απάντηση είναι απλή και συνίσταται στο εξής: Εάν ο νέος τύπος δεδομένων που προκύπτει είναι της ίδιας κατηγορίας με τον τύπο δεδομένων της αρχικής κλάσης τότε μπορούμε να χρησιμοποιήσουμε κληρονομικότητα. Εάν όμως ο νέος τύπος δεδομένων δεν είναι της ίδιας κατηγορίας με τον προηγούμενο τότε η 1η επιλογή είναι η βελτιστη. | + | |
- | + | ||
- | Για παράδειγμα, [[lib/exe/detail.php?id=java%3Ainheritance&media=java:super_sub_class.jpg|στο αρχικό παράδειγμα της κληρονομικότητας]], από τον | + |