Φωτογραφία Νικόλαος Πανάγος
Απάντηση: Παράδειγμα του βιβλίου
από Νικόλαος Πανάγος - Friday, 14 May 2010, 1:00 PM
 
Από αυτήν και την προηγούμενη ερώτησή σου συμπεραίνω πως μάλλον δεν έχεις καταλάβει καλά την κληρονομικότητα και τον πολυμορφισμό. Θα προσπαθήσω να σου εξηγήσω αλλά δε νομίζω πως μπορώ να το κάνω καλύτερα από ότι στις σημειώσεις. Για να έχεις πολυμορφική συμπεριφορά χρειάζεται μια ιεραρχία κλάσεων, υπερκαλυπτόμενες μέθοδοι και μία αναφορά τύπου βασικής κλάσης.
Ανάλογα με το αντικείμενο στο οποίο δείχνει η αναφορά κλάσης βάσης θα κληθεί η αντίστοιχη έκδοση της υπερκαλυπτόμενης μεθόδου, π.χ. αν η αναφορά δείχνει σε ένα αντικείμενο κλάσης βάσης θα κληθεί αυτόματα η αντίστοιχη έκδοση, αν μετά θέσουμε την αναφορά να δείχνει σε ένα αντικείμενο παράγωγης κλάσης και καλέσουμε την ίδια μέθοδο, πάλι θα κληθεί αυτόματα αυτή που πρέπει δηλαδή της παράγωγης κλάσης.
Λόγω της κληρονομικότητας έχεις τη δυνατότητα να κάνεις πράγματα όπως να έχεις μια αναφορά κλάσης βάσης που να δείχνει σε αντικείμενο κλάσης βάσης γιατί η ισχύει μια σχέση IS-A.
Το αντίστροφο δεν ισχύει, δηλαδή δε θα μπορούσες να έχεις μια αναφορά παράγωγης κλάσης να δείχνει σε αντικείμενο κλάσης βάσης χωρίς να κάνεις κάποιο cast. Κάτι τέτοιο σπάνια θα σου χρειαστεί, αν όχι ποτέ, γιατί είναι αντίθετο στη λογική μιας ιεραρχίας κλάσεων.
Τον πολυμορφισμό και την κληρονομικότητα, τους χρησιμοποιούμε όποτε κρίνουμε πως είναι απαραίτητα, δεν υπάρχουν οδηγίες ή κανόνες για αυτό. Είναι σαν να ρωτήσει κάποιος πότε πατάμε φρένο στο αυτοκίνητο, όπου αντίστοιχα η απάντηση θα ήταν "όποτε το χρειαστείς".

ΝΠ