This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:inheritance [2016/02/12 15:51] gthanos [Implicit και Explicit Casting of Objects] |
java:inheritance [2016/03/31 08:25] (current) doufexi [Τι μπορούμε να κάνουμε σε μία υποκλάση...] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Κληρονομικότητα ====== | ====== Κληρονομικότητα ====== | ||
| - | Βασικό χαρακτηριστικό του αντικειμενοστραφούς προγραμματισμού είναι η δυνατότητα να παράγουμε νέες κλάσεις με βάση υφιστάμενες κλάσεις, εξειδικεύοντας και επεκτείνοντας τα χαρακτηριστικά των υφιστάμενων. Η διαδικασία επέκτασης των υφιστάμενων κλάσεων σε νέες ειδικότερες κλάσεις ονομάζεται κληρονομικότητα. | + | Βασικό χαρακτηριστικό του αντικειμενοστραφούς προγραμματισμού είναι η δυνατότητα να παράγουμε νέες κλάσεις με βάση υφιστάμενες κλάσεις, εξειδικεύοντας και επεκτείνοντας τα χαρακτηριστικά τους. Η διαδικασία επέκτασης των υφιστάμενων κλάσεων σε νέες ειδικότερες κλάσεις ονομάζεται κληρονομικότητα. |
| Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (//subclass//) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (//superclass//) της κληρονομούμενης κλάσης. | Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (//subclass//) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (//superclass//) της κληρονομούμενης κλάσης. | ||
| Line 99: | Line 99: | ||
| * Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | * Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | ||
| + | | Προηγούμενο : [[ :java:access_modifiers | Περιοριστές πρόσβασης ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:type_casting | Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ]] | | ||
| - | ===== Final Κλάσεις και Μέθοδοι ===== | ||
| - | |||
| - | Μπορείτε να δηλώσετε μία ή περισσότερες μεθόδους μία κλάσης ως //final//. Δηλώνοντας μία μέθοδο ως final η μέθοδος αυτή δεν μπορεί να επαναοριστεί σε μία υποκλάση της κλάσης αυτής. Ο συχνότερος λόγος για να δηλώσετε μία μέθοδο ως //final// είναι αν η υλοποίηση της μεθόδου δεν πρέπει να αλλάξει. Ένα παράδειγμα είναι το παρακάτω: | ||
| - | |||
| - | <code java> | ||
| - | class ChessAlgorithm { | ||
| - | enum ChessPlayer { WHITE, BLACK } | ||
| - | ... | ||
| - | final ChessPlayer getFirstPlayer() { | ||
| - | return ChessPlayer.WHITE; | ||
| - | } | ||
| - | ... | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | Γενικότερα, μέθοδοι που καλούνται από τους κατασκευαστές της κλάσης __θα πρέπει__ να ορίζονται ως //final// καθώς αν αλλάζουν την υλοποίηση τους σε υποκλάσεις μπορούν να δημιουργηθούν προβλήματα ως προς την ορθή αρχικοποίηση των μεταβλητών της κλάσης. | ||
| - | |||
| - | Τέλος, μπορείτε να προσδιορίσετε μία κλάση ως //final//, όταν θέλετε να δηλώσετε ότι η συγκεκριμένη κλάση δεν πρέπει να έχει υποκλάσεις. Ένα παράδειγμα τέτοια κλάσης είναι η κλάση [[http://docs.oracle.com/javase/7/docs/api/java/lang/String.html | String]] της standard βιβλιοθήκης της Java. | ||
| - | |||
| - | |Προηγούμενο: [[ :java:interfaces | Διεπαφές ]] | Επόμενο: [[ :java:multiple_inheritance | Κληρονομικότητα πολλαπλών γονικών κλάσεων ]]| | ||