java:generics_inheritance

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:generics_inheritance [2015/03/19 14:22]
gthanos
java:generics_inheritance [2015/03/19 15:45]
gthanos
Line 16: Line 16:
 {{  :​java:​generics_inheritance1.png?​400 ​ }}  {{  :​java:​generics_inheritance1.png?​400 ​ }} 
  
-Μπορείτε ​να υλοποιήσετε παραμετρικούς τύπους ​δεδομένων που ​κληρονομούν ​από άλλους παραμετρικούς τύπους δεδομένων. ​Για παράδειγμα από την standard βιβλιοθήκη της Java μπορείτε να δείτε ότι ο τύπος ''​ArrayList<​E>''​ υλοποιεί το interface ''​List<​E>''​Το interface ''​List<​E>'' ​με την ​σειρά του επεκτείνει το interface ''​Collection<​E>''​. Έτσι μπορεί να οριστεί η παρακάτω ιεραρχία +<WRAP center round 70% tip> Η έννοια της κληρονομικότητας ​σε αυτή την ​παράγραφο δεν έχει ​την αυστηρή έννοια της ​κληρονομικότητας μεταξύ ​τύπων δεδομένων που ορίσαμε σε προηγούμενες ενότητες. Περισσότερο εστιάζει στο πρακτικό ερώτημα κατά πόσο μπορούμε να χρησιμοποιήσουμε ένα ​τύπο δεδομένων ​στην θέση ενός άλλου τύπου (π.χ. ως όρισμα σε μία μέθοδο). 
-<​code>​ +</​WRAP>​ 
-  Collection<​E> ​                          ​Collection<​String>​ + 
-      |                                          +Οι σχέσεις κληρονομικότητας μεταξύ παραμετρικών ​τύπων μπορούν να οριστούν ως εξήςΑν ένα παραμετρικό interface κληρονομεί ένα ​άλλο παραμετρικό interface τότε μπορούμε ​να πούμε ότι τα δύο interfaces διατηρούν την ​σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν ​είναι κοινός. Για παράδειγμα, ​η παρακάτω ​παραμετρική σχέση υποδηλώνει κληρονομικότητα ΜΟΝΟ για παραμέτρους ιδίου τύπου 
-      v                                          v +<​code ​java
-    List<​E> ​              π.χ. ​             ​List<​String>​  +  Collection<​E> ​               Collection<​String>                Collection<​Number
-      |                                          | +      |                               ​                               Χ 
-      ​                                         +      v          π.χ. ​                ​           ​όχι όμως και ​       ​
-  ​ArrayList<​E> ​                           ​ArrayList<​String>​+    List<​E> ​                      List<String>                      List<​Integer>
 </​code>​ </​code>​
  
 +Αντίστοιχα,​ αν μία παραμετρική κλάση κληρονομεί μία άλλη παραμετρική κλάση τότε μπορούμε να πούμε ότι οι δύο κλάσεις διατηρούν την σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. Δείτε το παρακάτω παράδειγμα
 +<code java>
 +  HashSet<​E> ​               HashSet<​String> ​                  ​HashSet<​Number>​
 +      |                          |                                  Χ
 +      v          π.χ. ​           v             ​όχι όμως και ​        v
 +LinkedHashSet<​E> ​        ​LinkedHashSet<​String> ​              ​LinkedHashSet<​Integer>​
 +</​code>​
 +
 +Τέλος, αν μία παραμετρική κλάση υλοποιεί ένα παραμετρικό interface τότε μπορούμε να πούμε ότι το interface και η κλάση διατηρούν σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. ​
 +<code java>
 +    List<​E> ​                  ​List<​String> ​                     List<​Number>​
 +      |           ​π.χ. ​            ​| ​          ​όχι όμως και ​        X
 +      v                            v                                V
 +  ArrayList<​E> ​            ​ArrayList<​String> ​                ​ArrayList<​Integer>​
 +</​code>​
  
java/generics_inheritance.txt · Last modified: 2016/02/26 11:15 (external edit)