java:generic_bounded_types

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Κληρονομικότητα παραμετρικών τύπων δεδομένων ====== <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?500 }} Μπορείτε να υλοποιήσετε παραμετρικούς τύπους δεδομένων που κληρονομούν από άλλους παραμετρικούς τύπους δεδομένων. Για παράδειγμα από την 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/generic_bounded_types.1426454194.txt.gz · Last modified: 2016/02/26 11:15 (external edit)