User Tools

Site Tools


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:39] 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 java TestCat.java> 
 +public class TestCat { 
 +  public static void main(String[] args) { 
 +    Cat myCat = new Cat(); 
 +    Animal myAnimalCat = myCat; 
 +    Animal myAnimal = new Animal(); 
 +     
 +    Animal.testClassMethod(); 
 +    Cat.testClassMethod();
  
-    public static void main(String[] args) { +    System.out.println("");
-        Cat myCat = new Cat(); +
-        Animal myAnimal = myCat; +
-        Animal yourAnimal = new Animal(); +
-         +
-        Animal.testClassMethod(); +
-        Cat.testClassMethod();+
  
-        System.out.println("");+    myAnimalCat.testClassMethod(); 
 +    myAnimal.testClassMethod(); 
 +    myCat.testClassMethod();
  
-        myAnimal.testClassMethod(); +    System.out.println(""); 
-        yourAnimal.testClassMethod(); +     
-        myCat.testClassMethod(); +    myAnimalCat.testInstanceMethod(); 
- +    myAnimal.testInstanceMethod(); 
-        System.out.println(""); +    myCat.testInstanceMethod();     
-         +  }
-        myCat.testInstanceMethod(); +
-        myAnimal.testInstanceMethod(); +
-        yourAnimal.testInstanceMethod(); +
-    }+
 } }
 </code> </code>
Line 56: 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.1424018374.txt.gz · Last modified: 2015/02/15 16:39 by gthanos