java:hiding_static_methods

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:hiding_static_methods [2015/02/15 16:46] gthanosjava:hiding_static_methods [2017/03/03 14:03] (current) gthanos
Line 1: Line 1:
-=====  Κρύβοντας στατικές μεθόδους  ======+=====  Καλώντας στατικές μεθόδους από την γονική κλάση και την υποκλάση  ======
  
 Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//. Ας δοκιμάσουμε το παρακάτω παράδειγμα κληρονομικότητας δύο κλάσεων που περιέχουν δύο στατικές μεθόδους με το ίδιο //signature//.
Line 5: Line 5:
 <code java Animal.java> <code java Animal.java>
 public class Animal { public class Animal {
-    public static void testClassMethod() { +  public static void testClassMethod() { 
-        System.out.println("The static method in Animal"); +    System.out.println("The static method in Animal"); 
-    +  
-    public void testInstanceMethod() { +  public void testInstanceMethod() { 
-        System.out.println("The instance method in Animal"); +    System.out.println("The instance method in Animal"); 
-    }+  }
 } }
 </code> </code>
Line 16: Line 16:
 <code java Cat.java> <code java Cat.java>
 public class Cat extends Animal { public class Cat extends Animal {
-    public static void testClassMethod() { +  public static void testClassMethod() { 
-        System.out.println("The static method in Cat"); +    System.out.println("The static method in Cat"); 
-    +  
-    public void testInstanceMethod() { +  public void testInstanceMethod() { 
-        System.out.println("The instance method in Cat"); +    System.out.println("The instance method in Cat"); 
-    }+  }
 } }
 </code>     </code>    
Line 27: Line 27:
 <code java TestCat.java> <code java TestCat.java>
 public class TestCat { 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();+    Cat.testClassMethod();
  
-        System.out.println("");+    System.out.println("");
  
-        myAnimal.testClassMethod(); +    myAnimalCat.testClassMethod(); 
-        yourAnimal.testClassMethod(); +    myAnimal.testClassMethod(); 
-        myCat.testClassMethod();+    myCat.testClassMethod();
  
-        System.out.println(""); +    System.out.println(""); 
-         +     
-        myCat.testInstanceMethod(); +    myAnimalCat.testInstanceMethod(); 
-        myAnimal.testInstanceMethod(); +    myAnimal.testInstanceMethod(); 
-        yourAnimal.testInstanceMethod(); +    myCat.testInstanceMethod();     
-    }+  }
 } }
 </code> </code>
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'') και όχι από το ίδιο το αντικείμενο στο οποίο δείχνει αυτή, όπως ίσως θα περίμενε ίσως κανείς να ισχύει με βάση [[:java:polymorphism|τον δυναμικό πολυμορφισμό της προηγούμενης παραγράφου]].  
 + 
 +Οι 3 τελευταίες γραμμές του προγράμματος αναφέρονται σε δυναμικό πολυμορφισμό για να δείξουν την αντίθεση των αποτελεσμάτων στην κλήση στατικών και μη στατικών μεθόδων.
  
 +|Προηγούμενο: [[ :java:polymorphism | Στατικός και Δυναμικός Πολυμορφισμός ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:abstract_classes | Abstract Κλάσεις ]]|
java/hiding_static_methods.1424018806.txt.gz · Last modified: 2015/02/15 16:46 by gthanos