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 [2017/03/03 13:35]
gthanos [Στατικός Πολυμορφισμός]
java:polymorphism [2017/03/03 13:51]
gthanos [Δυναμικός Πολυμορφισμός]
Line 18: Line 18:
     obj.sum(20,20);     obj.sum(20,20);
     obj.sum(12.2, 11.3);         obj.sum(12.2, 11.3);    
-  }  +  } 
 +}
 </code> </code>
  
Line 67: Line 68:
 Παρατηρούμε ότι η κλήση της μεθόδου ''signature'' από τρεις μεταβλητές τύπου ''Animal'' που η πρώτη (''a'') δείχνει σε αντικείμενο της γονικής κλάσης (''Animal''), η δεύτερη (''b'') σε αντικείμενο της υποκλάσης (''Mammal'') και η τρίτη η δεύτερη (''b'') σε αντικείμενο της υποκλάσης (''Dog'') έχει ως αποτέλεσμα την κλήση διαφορετικών μεθόδων. Η απόφαση για το ποια μέθοδος θα κληθεί σε κάθε μία από τις τρεις περιπτώσεις δεν μπορεί να αποφασιστεί κατά την μεταγλώττιση του προγράμματος. Το JVM καλείται να αποφασίσει, με βάση τον τύπο του αντικειμένου στο οποίο δείχνει κάθε μεταβλητή κατά την εκτέλεση. Παρατηρούμε ότι η κλήση της μεθόδου ''signature'' από τρεις μεταβλητές τύπου ''Animal'' που η πρώτη (''a'') δείχνει σε αντικείμενο της γονικής κλάσης (''Animal''), η δεύτερη (''b'') σε αντικείμενο της υποκλάσης (''Mammal'') και η τρίτη η δεύτερη (''b'') σε αντικείμενο της υποκλάσης (''Dog'') έχει ως αποτέλεσμα την κλήση διαφορετικών μεθόδων. Η απόφαση για το ποια μέθοδος θα κληθεί σε κάθε μία από τις τρεις περιπτώσεις δεν μπορεί να αποφασιστεί κατά την μεταγλώττιση του προγράμματος. Το JVM καλείται να αποφασίσει, με βάση τον τύπο του αντικειμένου στο οποίο δείχνει κάθε μεταβλητή κατά την εκτέλεση.
  
-Στο παραπάνω παράδειγμα, το JVM γνωρίζει το είδος του αντικειμένου στο οποίο δείχνουν οι μεταβλητές ''a'', ''b'' και ''c'' ανεξάρτητα εάν η reference μεταβλητή είναι του τύπου της γονικής κλάσης ή της υποκλάσης. Η παραπάνω διάκριση είναι γνωστή και ως δυναμικός πολυμορφισμός (//dynamic polymorphism//), καθώς το ποια μέθοδος θα κληθεί τελικά επαφίεται στο JVM και όχι στον compiler.+Στο παραπάνω παράδειγμα, το JVM γνωρίζει το είδος του αντικειμένου στο οποίο δείχνουν οι μεταβλητές ''a'', ''b'' και ''c'' ανεξάρτητα εάν η reference μεταβλητή είναι του τύπου της γονικής κλάσης ή της υποκλάσης. Η παραπάνω διάκριση είναι γνωστή ως δυναμικός πολυμορφισμός (//dynamic polymorphism//), διότι το ποια μέθοδος θα κληθεί αποφασίζεται κατά την εκτέλεση και όχι κατά την μεταγλώττιση.
  
 |Προηγούμενο: [[ :java:super_operator | Ο τελεστής super ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:hiding_static_methods | Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση ]]| |Προηγούμενο: [[ :java:super_operator | Ο τελεστής super ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:hiding_static_methods | Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση ]]|
java/polymorphism.txt · Last modified: 2020/03/27 13:18 by gthanos