This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:inheritance [2015/02/13 13:39] gthanos |
java:inheritance [2016/03/31 08:25] (current) doufexi [Τι μπορούμε να κάνουμε σε μία υποκλάση...] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Κληρονομικότητα ====== | ====== Κληρονομικότητα ====== | ||
| - | Σε προηγούμενη παράγραφο, αναφερόμενοι στην κλάση έγινε [[:java:class#Κληρονομικότητα Κλάσης | αναφορά στην κληρονομικότητα κλάσεων]] στην Java. Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (//subclass//) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (//superclass//) της κληρονομούμενης κλάσης. | + | Βασικό χαρακτηριστικό του αντικειμενοστραφούς προγραμματισμού είναι η δυνατότητα να παράγουμε νέες κλάσεις με βάση υφιστάμενες κλάσεις, εξειδικεύοντας και επεκτείνοντας τα χαρακτηριστικά τους. Η διαδικασία επέκτασης των υφιστάμενων κλάσεων σε νέες ειδικότερες κλάσεις ονομάζεται κληρονομικότητα. |
| - | {{ :java:super_sub_class.jpg | }} | + | Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (//subclass//) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (//superclass//) της κληρονομούμενης κλάσης. |
| - | <WRAP tip> | + | {{ :java:super_sub_class.jpg | }} |
| - | ΌΛΕΣ οι κλάσεις στην Java κληρονομούν την βασική κλάση [[http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html | Object]]. Για παράδειγμα, η κλάση [[http://docs.oracle.com/javase/7/docs/api/java/lang/String.html| String]] κληρονομεί την κλάση Object. Την κλάση [[http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html | Object]] θα την αναλύσουμε στη συνέχεια. | + | |
| - | </WRAP> | + | |
| - | Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (//subclass//) μπορεί να κληρονομεί __**ΜΟΝΟ ΜΙΑ**__ άλλη κλάση. Αντίστροφα μία κλάση (//superclass//) μπορεί να κληρονομεί πολλές διαφορετικές κλάσεις. Παρακάτω δίνουμε το παράδειγμα κληρονομικότητας που παρουσιάσαμε νωρίτερα ελαφρά παραλλαγμένο. | + | Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (//subclass//) μπορεί να κληρονομεί __**ΜΟΝΟ ΜΙΑ**__ άλλη κλάση. Αντίστροφα μία κλάση (//superclass//) μπορεί να κληρονομείται από πολλές διαφορετικές κλάσεις. Παρακάτω δίνουμε ένα παράδειγμα κληρονομικότητας από το site της [[https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html|Oracle]], όπου η κλάση ''MountainBike'' αποτελεί εξειδίκευση της κλάσης ''Bicycle''. |
| <code java Bicycle.java> | <code java Bicycle.java> | ||
| Line 84: | Line 82: | ||
| Μία κλάση η οποία κληρονομεί μία άλλη κλάση έχει πρόσβαση στα μέλη (πεδία και μεθόδους) της κλάσης αυτής ως εξής: | Μία κλάση η οποία κληρονομεί μία άλλη κλάση έχει πρόσβαση στα μέλη (πεδία και μεθόδους) της κλάσης αυτής ως εξής: | ||
| - | * Έχει πρόσβαση στα //public// και //protected// μέλη της γονικής κλάσης | + | * Έχει πρόσβαση στα //**public**// και //**protected**// μέλη της γονικής κλάσης |
| - | * Έχει πρόσβαση στα //package private// μέλη (δηλ. τα μέλη χωρίς προσδιοριστή πρόσβασης) μόνο αν βρίσκεται στο ίδιο πακέτο με την γονική κλάση. | + | * Έχει πρόσβαση στα //**package private**// μέλη (δηλ. τα μέλη χωρίς προσδιοριστή πρόσβασης) μόνο αν βρίσκεται στο ίδιο πακέτο με την γονική κλάση. |
| - | * Δεν έχει πρόσβαση στα //private// μέλη της κλάσης. | + | * Δεν έχει πρόσβαση στα //**private**// μέλη της κλάσης. |
| - | Αν υπάρχουν //public// μέθοδοι οι οποίες επιτρέπουν την πρόσβαση σε //private// πεδία, τότε αυτές μπορούν να χρησιμοποιηθούν για τον ορισμό ή για την λήψη της τιμής τους. | + | Αν υπάρχουν //**public**// μέθοδοι οι οποίες επιτρέπουν την πρόσβαση σε //**private**// πεδία, τότε αυτές μπορούν να χρησιμοποιηθούν για τον ορισμό ή για την λήψη της τιμής τους. |
| ===== Τι μπορούμε να κάνουμε σε μία υποκλάση... ===== | ===== Τι μπορούμε να κάνουμε σε μία υποκλάση... ===== | ||
| Line 101: | Line 99: | ||
| * Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | * Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | ||
| - | ===== Implicit και Explicit Casting of Objects ===== | + | | Προηγούμενο : [[ :java:access_modifiers | Περιοριστές πρόσβασης ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:type_casting | Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ]] | |
| - | + | ||
| - | + | ||