java:hiding_static_methods

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

===== Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση ====== Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//. <code java Animal.java> public class Animal { public static void testClassMethod() { System.out.println("The static method in Animal"); } public void testInstanceMethod() { System.out.println("The instance method in Animal"); } } </code> <code java Cat.java> public class Cat extends Animal { public static void testClassMethod() { System.out.println("The static method in Cat"); } public void testInstanceMethod() { System.out.println("The instance method in Cat"); } } </code> <code java TestCat.java> public class TestCat { public static void main(String[] args) { Cat myCat = new Cat(); Animal myAnimal = myCat; Animal yourAnimal = new Animal(); Animal.testClassMethod(); Cat.testClassMethod(); System.out.println(""); myAnimal.testClassMethod(); yourAnimal.testClassMethod(); myCat.testClassMethod(); System.out.println(""); myCat.testInstanceMethod(); myAnimal.testInstanceMethod(); yourAnimal.testInstanceMethod(); } } </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 Cat The instance method in Animal </code> Παρατηρούμε ότι ο τύπος των δεδομένων από τον οποίο καλούμε μία στατική μέθοδο είναι καθοριστικός για το ποια μέθοδος θα κλήθεί τελικά. Για παράδειγμα, η μεταβλητή ''myAnimal'' ορίζεται ως τύπου ''Animal'' αλλά δείχνει σε ένα αντικείμενο τύπου ''Cat''. Η στατική μέθοδος που τελικά καλείται είναι εκείνη που ορίζεται από τον τύπο της reference μεταβλητής (''Animal'' ή ''Cat'') και όχι από το ίδιο το αντικείμενο στο οποίο δείχνει αυτή, όπως θα περίμενε ίσως κανείς να ισχύει με βάση τον δυναμικό πολυμορφισμό της προηγούμενης παραγράφου. Οι 3 τελευταίες γραμμές του προγράμματος αναφέρονται σε δυναμικό πολυμορφισμό για να δείξουν την αντίθεση των αποτελεσμάτων στην κλήση στατικών και μη στατικών μεθόδων. |Προηγούμενο: [[ :java:polymorphism | Στατικός και Δυναμικός Πολυμορφισμός ]] | Επόμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]]|

java/hiding_static_methods.1424022041.txt.gz · Last modified: 2016/02/26 11:15 (external edit)