User Tools

Site Tools


java:generics_inheritance

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:generics_inheritance [2015/03/19 15:40] gthanosjava:generics_inheritance [2020/03/10 10:21] (current) – external edit 127.0.0.1
Line 11: Line 11:
 doubleBox.add(new Double(10.1));           // line 8 doubleBox.add(new Double(10.1));           // line 8
  
-box.boxTest(doubleBox); // μπορούμε να γράψουμε?+box.boxTest(doubleBox); // line 10. Μπορούμε να γράψουμε?
 </code> </code>
-Ο παραπάνω κώδικας είναι σωστός στις γραμμές 3-5 διότι οι κλάσεις ''Integer'' και ''Double'' είναι υποκλάσεις της κλάσης ''Number''. Δεν ισχύει όμως το ίδιο για την γραμμή καθώς η κλάση ''Box<Double>'' **__δεν είναι__** υποκλάση της κλάσης ''Box<Number>'', όπως δείχνει το παρακάτω σχήμα. ''Box<Number>'' και ''Box<Double>'' είναι υποκλάσεις της κλάσης ''Object''. +Ο παραπάνω κώδικας είναι σωστός στις γραμμές 3 έως και 8. Στις γραμμές 3-5 οι κλάσεις ''Integer'' και ''Double'' είναι υποκλάσεις της κλάσης ''Number'', ενώ στις γραμμές 7-8 το αντικείμενο ''doubleBox'' αποθηκευει ένα αντικείμενο τύπου ''Double''. Δεν ισχύει όμως το ίδιο για την γραμμή 10 καθώς η μέθοδος ''boxText'' λαμβάνει ως όρισμα ένα αντικείμενο τύπου ''Box<Number>''. Η κλάση ''Box<Double>'' **__δεν είναι__** υποκλάση της κλάσης ''Box<Number>'', όπως δείχνει το παρακάτω σχήμα.  
-{{  :java:generics_inheritance1.png?400  }} + 
 +{{  :java:generics_inheritance1.png?700  }} 
  
 <WRAP center round 70% tip> Η έννοια της κληρονομικότητας σε αυτή την παράγραφο δεν έχει την αυστηρή έννοια της κληρονομικότητας μεταξύ τύπων δεδομένων που ορίσαμε σε προηγούμενες ενότητες. Περισσότερο εστιάζει στο πρακτικό ερώτημα κατά πόσο μπορούμε να χρησιμοποιήσουμε ένα τύπο δεδομένων στην θέση ενός άλλου τύπου (π.χ. ως όρισμα σε μία μέθοδο). <WRAP center round 70% tip> Η έννοια της κληρονομικότητας σε αυτή την παράγραφο δεν έχει την αυστηρή έννοια της κληρονομικότητας μεταξύ τύπων δεδομένων που ορίσαμε σε προηγούμενες ενότητες. Περισσότερο εστιάζει στο πρακτικό ερώτημα κατά πόσο μπορούμε να χρησιμοποιήσουμε ένα τύπο δεδομένων στην θέση ενός άλλου τύπου (π.χ. ως όρισμα σε μία μέθοδο).
 </WRAP> </WRAP>
  
-Οι σχέσεις κληρονομικότητας μεταξύ παραμετρικών τύπων μπορούν να οριστούν ως εξήςΑν ένα παραμετρικό interface κληρονομεί ένα άλλο παραμετρικό interface τότε μπορούμε να πούμε ότι τα δύο interfaces διατηρούν την σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. Για παράδειγμα, η παρακάτω παραμετρική σχέση υποδηλώνει κληρονομικότητα ΜΟΝΟ για παραμέτρους ιδίου τύπου +Οι σχέσεις κληρονομικότητας μεταξύ παραμετρικών τύπων μπορούν να οριστούν ως εξής:  
-<code java+  * Αν ένα παραμετρικό interface κληρονομεί ένα άλλο παραμετρικό interface τότε μπορούμε να πούμε ότι τα δύο interfaces διατηρούν την σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. Για παράδειγμα, η παρακάτω παραμετρική σχέση υποδηλώνει κληρονομικότητα ΜΟΝΟ για παραμέτρους ιδίου τύπου 
-  Collection<E>                Collection<String>                Collection<String>+<code> 
 +  Collection<E>                Collection<String>                Collection<Number>
       |                                                              Χ       |                                                              Χ
       v          π.χ.                            όχι όμως και        v       v          π.χ.                            όχι όμως και        v
Line 27: Line 29:
 </code> </code>
  
-Αντίστοιχα, αν μία παραμετρική κλάση κληρονομεί μία άλλη παραμετρική κλάση τότε μπορούμε να πούμε ότι οι δύο κλάσεις διατηρούν την σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. Δείτε το παρακάτω παράδειγμα +  * Αντίστοιχα, αν μία παραμετρική κλάση κληρονομεί μία άλλη παραμετρική κλάση τότε μπορούμε να πούμε ότι οι δύο κλάσεις διατηρούν την σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. Δείτε το παρακάτω παράδειγμα 
-<code java+<code> 
-  HashSet<E>                HashSet<String>                   HashSet<String>+  HashSet<E>                HashSet<String>                   HashSet<Number>
       |                          |                                  Χ       |                          |                                  Χ
       v          π.χ.            v             όχι όμως και         v       v          π.χ.            v             όχι όμως και         v
Line 35: Line 37:
 </code> </code>
  
-Τέλος, αν μία παραμετρική κλάση υλοποιεί ένα παραμετρικό interface τότε μπορούμε να πούμε ότι το interface και η κλάση διατηρούν σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. +  * Τέλος, αν μία παραμετρική κλάση υλοποιεί ένα παραμετρικό interface τότε μπορούμε να πούμε ότι το interface και η κλάση διατηρούν σχέση κληρονομικότητας ΜΟΝΟ αν ο παραμετρικός τύπος που χρησιμοποιούν είναι κοινός. 
 <code java> <code java>
-    List<E>                   List<String>                      List<String>+    List<E>                   List<String>                      List<Number>
       |           π.χ.                       όχι όμως και         X       |           π.χ.                       όχι όμως και         X
       v                            v                                V       v                            v                                V
   ArrayList<E>             ArrayList<String>                 ArrayList<Integer>   ArrayList<E>             ArrayList<String>                 ArrayList<Integer>
 </code> </code>
 +
 +|Προηγούμενο: [[:java:generic_methods | Παραμετρικοί τύποι δεδομένων σε μεθόδους (Generic Methods)  ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:generic_bounded_types | Φραγμένοι παραμετρικοί τύπων δεδομένων  ]] |
  
java/generics_inheritance.1426779603.txt.gz · Last modified: 2015/03/19 15:40 (external edit)