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/19 14:22]
gthanos
java:generics_inheritance [2016/02/26 11:15]
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>'',​ όπως δείχνει το παρακάτω σχήμα. ''​Box<​Number>''​ και ''​Box<​Double>''​ είναι υποκλάσεις της κλάσης ''​Object''​. 
-{{  :​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: 2016/02/26 11:15 (external edit)