java:polymorphism

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
Next revision Both sides next revision
java:polymorphism [2016/02/15 09:04]
gthanos [Στατικός Πολυμορφισμός]
java:polymorphism [2016/02/15 09:08]
gthanos [Δυναμικός Πολυμορφισμός]
Line 23: Line 23:
 Η παραπάνω διαδικασία αναφέρεται συχνά και ως στατικός πολυμορφισμός (//static polymorphism//​) σε αντιδιαστολή με τον δυναμικό πολυμορφισμό που θα δούμε στη συνέχεια. Η παραπάνω διαδικασία αναφέρεται συχνά και ως στατικός πολυμορφισμός (//static polymorphism//​) σε αντιδιαστολή με τον δυναμικό πολυμορφισμό που θα δούμε στη συνέχεια.
  
-<​WRAP ​impoart ​80% center round>+<​WRAP ​important ​80% center round>
 Όπως προαναφέραμε,​ ο στατικός πολυμορφισμός βασίζεται στον διαφορετικό αριθμό,​ τον τύπο και τη σειρά ορισμάτων. Το συγκεκριμένο είδος πολυμορφισμού ονομάζεται στατικό διότι η μέθοδος που θα κληθεί αποφασίζεται από τον compiler κατά την μεταγλώττιση του προγράμματος. Όπως προαναφέραμε,​ ο στατικός πολυμορφισμός βασίζεται στον διαφορετικό αριθμό,​ τον τύπο και τη σειρά ορισμάτων. Το συγκεκριμένο είδος πολυμορφισμού ονομάζεται στατικό διότι η μέθοδος που θα κληθεί αποφασίζεται από τον compiler κατά την μεταγλώττιση του προγράμματος.
 </​WRAP>​ </​WRAP>​
Line 62: Line 62:
 </​code>​ </​code>​
  
-Παρατηρούμε ότι η κλήση της μεθόδου ''​signature''​ από δύο μεταλητές τύπου ''​Animal''​ που η πρώτη (''​a''​) δείχνει σε αντικείμενο της γονικής κλάσης (''​Animal''​) και η δεύτερη (''​b''​) σε αντικείμενο της υποκλάσης (''​Dog''​) έχει ως αποτέλεσμα την κλήση διαφορετικών μεθόδων. Η απόφαση για το ποια μέθοδος θα κληθεί επαφίεται στο JVM κατά την εκτέλεση του προγράμματος. ​Το JVM αντιλαμβάνεται το είδος του αντικειμένου στο οποίο δείχνει η μεταβλητή ''​b'',​ ανεξάρτητα εάν η reference μεταβλητή είναι του τύπου της γονικής κλάσης ή της υποκλάσης αυτής. Η παραπάνω διάκριση είναι γνωστή και ως δυναμικός πολυμορφισμός (//dynamic polymorphism//​).+Παρατηρούμε ότι η κλήση της μεθόδου ''​signature''​ από δύο μεταλητές τύπου ''​Animal''​ που η πρώτη (''​a''​) δείχνει σε αντικείμενο της γονικής κλάσης (''​Animal''​) και η δεύτερη (''​b''​) σε αντικείμενο της υποκλάσης (''​Dog''​) έχει ως αποτέλεσμα την κλήση διαφορετικών μεθόδων. Η απόφαση για το ποια μέθοδος θα κληθεί ​δεν μπορεί να αποφασιστεί από ​τον compiler. Το JVM καλείται να αποφασίσει ​κατά την εκτέλεση του προγράμματος, ανάλογα με το είδος του αντικειμένου στο οποίο τελικά δείχνει κάθε μεταβλητή 
 + 
 +Στο παραπάνω παράδειγμα,​ το JVM αντιλαμβάνεται το είδος του αντικειμένου στο οποίο δείχνουν οι μεταβλητές ''​a'', ​''​b'' ​ανεξάρτητα εάν η reference μεταβλητή είναι του τύπου της γονικής κλάσης ή της υποκλάσης. Η παραπάνω διάκριση είναι γνωστή και ως δυναμικός πολυμορφισμός (//dynamic polymorphism//​), καθώς το ποια μέθοδος θα κληθεί τελικά επαφίεται στο JVM και όχι στον compiler.
  
 |Προηγούμενο:​ [[ :​java:​super_operator | Ο τελεστής super ]] | Επόμενο:​ [[ :​java:​hiding_static_methods | Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση ]]| |Προηγούμενο:​ [[ :​java:​super_operator | Ο τελεστής super ]] | Επόμενο:​ [[ :​java:​hiding_static_methods | Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση ]]|
java/polymorphism.txt · Last modified: 2017/02/16 14:20 by gthanos