====== Σχέσεις κληρονομικότητας φραγμένων παραμετρικών τύπων δεδομένων ======
===Η συγκεκριμένη ενότητα είναι προαιρετική και μπορείτε να την παραλήψετε κατά την ανάγνωση της θεωρείας του μαθήματος.===
Όπως είδαμε οι τύποι ''List'' και ''List'' δεν διέπονται από καμία σχέση κληρονομικότητας. Ο κοινός πατέρας και τον δύο λιστών είναι η κλάση ''List>'', όπως φαίνεται παρακάτω
{{ :java:generics_inheritance2.png |}}
Γενικότερα, σχέσεις κληρονομικότητας μεταξύ φραγμένων τύπων ισχύουν με κριτήρια κατά πόσο μπορούμε να αντικαταστήσουμε ένα τύπο δεδομένων με έναν άλλο τύπο δεδομένων. Δείτε τα παρακάτω παραδείγματα κληρονομικότητας
List>
|
v
List extends Number>
|
v
List extends Integer>
|
v
List
Αντίστοιχα ισχύουν
List>
|
v
List super Integer>
|
v
List super Number>
|
v
List
Ανάλογα ισχύουν και τα παρακάτω
List extends Number> List super Integer>
| και |
------------------------------------ ------------------------------------
| | | |
v v v v
List List List List
==== Εφαρμόζοντας σε κώδικα τα παραπάνω ====
Δοκιμάστε να μεταγλωττίσετε τα παρακάτω παραδείγματα κώδικα για να επιβεβαιώσετε τα παραπάνω.
List extends Νumber> numList = new ArrayList<>();
List> objectList = numList;
List extends Integer> intList = new ArrayList<>();
List extends Number> numList = intList;
List intList = new ArrayList<>();
List extends Integer> extendedIntList = intList;
Ανάλογα
List super Integer> intList = new ArrayList<>();
List> objectList = intList;
List super Number> numList = new ArrayList<>();
List super Integer> inList = numList;
List numList = new ArrayList<>();
List super Number> extendedNumList = numList;
Το παρακάτω σχήμα εξηγεί τις σχέσεις κληρονομικότητας που διέπουν (άνω και κάτω) φραγμένους τύπους δεδομένων για τον παραμετρικό τύπο δεδομένων της λίστας.
{{ :java:generics_inheritance3.png |}}
|Προηγούμενο: [[:java:generic_bounded_types | Φραγμένοι παραμετρικοί τύπων δεδομένων ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:collections_intro| Collections ]] |