This is an old revision of the document!
Βασικό χαρακτηριστικό του αντικειμενοστραφούς προγραμματισμού είναι η δυνατότητα να παράγουμε νέες κλάσεις με βάση υφιστάμενες, εξειδικεύοντας και επεκτείνοντας τα χαρακτηριστικά τους. Η διαδικασία επέκτασης των υφιστάμενων κλάσεων σε νέες ειδικότερες κλάσεις ονομάζεται κληρονομικότητα.
Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (subclass) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (superclass) της κληρονομούμενης κλάσης.
Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (subclass) μπορεί να κληρονομεί ΜΟΝΟ ΜΙΑ άλλη κλάση. Αντίστροφα μία κλάση (superclass) μπορεί να κληρονομείται από πολλές διαφορετικές κλάσεις. Παρακάτω δίνουμε ένα παράδειγμα κληρονομικότητας, όπου η κλάση MountainBike αποτελεί εξειδίκευση της κλάσης Bicycle.
public class Bicycle { private int frameSize; private int gearsNumber; private String color; public Bicycle(int frameSize, int gearsNumber, String color) { this.frameSize = frameSize; this.gearsNumber = gearsNumber; this.color = color; } public int getFrameSize() { return frameSize; } public int getGearsNumber() { return gearsNumber; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String toString() { return "frame: "+frameSize+", gears: "+gearsNumber+", color: "+color; } }
public class MountainBike extends Bicycle { private boolean suspension; public MountainBike(int frameSize, int gearsNumber, String color, boolean hasSuspension) { super(frameSize, gearsNumber, color); this.suspension = hasSuspension; } public boolean hasSuspension() { return suspension; } public void updateColor(String color) { //this.color = color; setColor(color); } public String toString() { String str = ", hasSuspension: " + suspension ? "yes" : "no"; return super.toString() + str; } }
Μία κλάση η οποία κληρονομεί μία άλλη κλάση έχει πρόσβαση στα μέλη (πεδία και μεθόδους) της κλάσης αυτής ως εξής:
Αν υπάρχουν public μέθοδοι οι οποίες επιτρέπουν την πρόσβαση σε private πεδία, τότε αυτές μπορούν να χρησιμοποιηθούν για τον ορισμό ή για την λήψη της τιμής τους.
| Προηγούμενο: Περιοριστές Πρόσβασης | Επόμενο: Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων |