java:generics_inheritance

Differences

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

Link to this comparison view

java:generics_inheritance [2015/03/15 21:42]
gthanos
java:generics_inheritance [2020/03/10 10:21]
Line 1: Line 1:
-====== Κληρονομικότητα παραμετρικών τύπων δεδομένων ====== 
- 
-<code java> 
-public void boxTest(Box<Number> n) { /* ... */ }  //line 1 
- 
-Box<Number> box = new Box<Number>();  //line 3 
-box.add(new Integer(10));             //line 4 
-box.add(new Double(10.1));            //line 5 
- 
-Box<Double> doubleBox = new Box<Double>(); // line 7 
-doubleBox.add(new Double(10.1));           // line 8 
- 
-box.boxTest(doubleBox); // μπορούμε να γράψουμε? 
-</code> 
-Ο παραπάνω κώδικας είναι σωστός στις γραμμές 3-5 διότι οι κλάσεις ''Integer'' και ''Double'' είναι υποκλάσεις της κλάσης ''Number''. Δεν ισχύει όμως το ίδιο για την γραμμή 8 καθώς η κλάση ''Box<Double>'' **__δεν είναι__** υποκλάση της κλάσης ''Box<Number>'', όπως δείχνει το παρακάτω σχήμα. 
-{{  :java:generics_inheritance1.png?400  }}  
- 
-Μπορείτε να υλοποιήσετε παραμετρικούς τύπους δεδομένων που κληρονομούν από άλλους παραμετρικούς τύπους δεδομένων. Για παράδειγμα από την standard βιβλιοθήκη της Java μπορείτε να δείτε ότι ο τύπος ''ArrayList<E>'' υλοποιεί το interface ''List<E>''. Το interface ''List<E>'' με την σειρά του επεκτείνει το interface ''Collection<E>''. Έτσι μπορεί να οριστεί η παρακάτω ιεραρχία 
-<code> 
-  Collection<E>                           Collection<String> 
-      |                                          | 
-      v                                          v 
-    List<E>               π.χ.              List<String>  
-      |                                          | 
-      v                                          v 
-  ArrayList<E>                            ArrayList<String> 
-</code> 
- 
  
java/generics_inheritance.txt · Last modified: 2020/03/10 10:21 (external edit)