This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| 
                    java:hiding_static_methods [2015/02/15 16:32] gthanos  | 
                
                    java:hiding_static_methods [2016/03/31 08:46] (current) doufexi  | 
            ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Κρύβοντας στατικές μεθόδους  ====== | + | ===== Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση  ====== | 
| Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//. | Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//. | ||
| Line 22: | Line 22: | ||
| System.out.println("The instance method in Cat"); | System.out.println("The instance method in Cat"); | ||
| } | } | ||
| + | } | ||
| + | </code>  | ||
| + | |||
| + | <code java TestCat.java> | ||
| + | public class TestCat { | ||
| 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(); | ||
| + | Cat.testClassMethod(); | ||
| + | |||
| + | System.out.println(""); | ||
| + | |||
| + | myAnimalCat.testClassMethod(); | ||
| myAnimal.testClassMethod(); | myAnimal.testClassMethod(); | ||
| myCat.testClassMethod(); | myCat.testClassMethod(); | ||
| - | yourAnimal.testClassMethod(); | + | |
| + | System.out.println(""); | ||
|  |  | ||
| - | myCat.testInstanceMethod(); | + | myAnimalCat.testInstanceMethod(); | 
| myAnimal.testInstanceMethod(); | myAnimal.testInstanceMethod(); | ||
| - | yourAnimal.testInstanceMethod(); | + | myCat.testInstanceMethod();  | 
| } | } | ||
| } | } | ||
| </code> | </code> | ||
| + | Η έξοδος του παραπάνω προγράμματος είναι  | ||
| + | |||
| + | <code> | ||
| + | The static method in Animal | ||
| + | The static method in Cat | ||
| + | |||
| + | The static method in Animal | ||
| + | The static method in Animal | ||
| + | The static method in Cat | ||
| + | |||
| + | The instance method in Cat | ||
| + | The instance method in Animal | ||
| + | The instance method in Cat | ||
| + | |||
| + | </code> | ||
| + | |||
| + | Παρατηρούμε ότι ο τύπος των δεδομένων από τον οποίο καλούμε μία στατική μέθοδο είναι καθοριστικός για το ποια μέθοδος θα κλήθεί τελικά. Για παράδειγμα, η μεταβλητή ''myAnimal'' ορίζεται ως τύπου ''Animal'' αλλά δείχνει σε ένα αντικείμενο τύπου ''Cat''. Η στατική μέθοδος που τελικά καλείται είναι εκείνη που ορίζεται από τον τύπο της reference μεταβλητής (''Animal'' ή ''Cat'') και όχι από το ίδιο το αντικείμενο στο οποίο δείχνει αυτή, όπως ίσως θα περίμενε ίσως κανείς να ισχύει με βάση [[:java:polymorphism|τον δυναμικό πολυμορφισμό της προηγούμενης παραγράφου]].  | ||
| + | |||
| + | Οι 3 τελευταίες γραμμές του προγράμματος αναφέρονται σε δυναμικό πολυμορφισμό για να δείξουν την αντίθεση των αποτελεσμάτων στην κλήση στατικών και μη στατικών μεθόδων. | ||
| + | |||
| + | |Προηγούμενο: [[ :java:polymorphism | Στατικός και Δυναμικός Πολυμορφισμός ]] | [[ :toc | Περιεχόμενα ]]| Επόμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]]| | ||