This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:hiding_static_methods [2015/02/15 16:46] gthanos |
java:hiding_static_methods [2015/04/20 06:50] gthanos |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Κρύβοντας στατικές μεθόδους ====== | + | ===== Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση ====== |
Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//. | Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//. | ||
Line 29: | Line 29: | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
Cat myCat = new Cat(); | Cat myCat = new Cat(); | ||
- | Animal myAnimal = myCat; | + | Animal myAnimalCat = myCat; |
- | Animal yourAnimal = new Animal(); | + | Animal myAnimal = new Animal(); |
| | ||
Animal.testClassMethod(); | Animal.testClassMethod(); | ||
Line 37: | Line 37: | ||
System.out.println(""); | System.out.println(""); | ||
+ | myAnimalCat.testClassMethod(); | ||
myAnimal.testClassMethod(); | myAnimal.testClassMethod(); | ||
- | yourAnimal.testClassMethod(); | ||
myCat.testClassMethod(); | myCat.testClassMethod(); | ||
System.out.println(""); | System.out.println(""); | ||
| | ||
- | myCat.testInstanceMethod(); | + | myAnimalCat.testInstanceMethod(); |
myAnimal.testInstanceMethod(); | myAnimal.testInstanceMethod(); | ||
- | yourAnimal.testInstanceMethod(); | + | myCat.testInstanceMethod(); |
} | } | ||
} | } | ||
Line 60: | Line 60: | ||
The static method in Cat | The static method in Cat | ||
- | The instance method in Cat | ||
The instance method in Cat | The instance method in Cat | ||
The instance method in Animal | The instance method in Animal | ||
+ | The instance method in Cat | ||
+ | |||
</code> | </code> | ||
- | Παρατηρούμε ότι σε αντίθεση | + | Παρατηρούμε ότι ο τύπος των δεδομένων από τον οποίο καλούμε μία στατική μέθοδο είναι καθοριστικός για το ποια μέθοδος θα κλήθεί τελικά. Για παράδειγμα, η μεταβλητή ''myAnimal'' ορίζεται ως τύπου ''Animal'' αλλά δείχνει σε ένα αντικείμενο τύπου ''Cat''. Η στατική μέθοδος που τελικά καλείται είναι εκείνη που ορίζεται από τον τύπο της reference μεταβλητής (''Animal'' ή ''Cat'') και όχι από το ίδιο το αντικείμενο στο οποίο δείχνει αυτή, όπως θα περίμενε ίσως κανείς να ισχύει με βάση τον δυναμικό πολυμορφισμό της προηγούμενης παραγράφου. |
+ | |||
+ | Οι 3 τελευταίες γραμμές του προγράμματος αναφέρονται σε δυναμικό πολυμορφισμό για να δείξουν την αντίθεση των αποτελεσμάτων στην κλήση στατικών και μη στατικών μεθόδων. | ||
+ | |Προηγούμενο: [[ :java:polymorphism | Στατικός και Δυναμικός Πολυμορφισμός ]] | Επόμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]]| |