Υποκλάση (subclass)
Γενικές αρχές για υποκλάσεις και κληρονομικότητα
- Μια κλάση που παράγεται από μια άλλη κλάση καλείται υποκλάση (subclass) ή παραγόμενη κλάση (derived) ή θυγατρική κλάση (child).
- Η κλάση από την οποία παράγεται μια κλάση λέγεται υπερκλάση (superclass) ή γονική κλάση (parent) ή βασική κλάση (base).
- Μια υποκλάση έχει τα δικά της πεδία, μεθόδους και κατασκευαστές όπως κάθε άλλη κλάση.
- Μια υποκλάση κληρονομεί (inherit) τις public και protected μεθόδους και πεδία της υπερκλάσης αλλά όχι τους κατασκευαστές, μπορεί όμως να έχει πρόσβαση σε αυτούς.
- Μια υποκλάση για να έχει πρόσβαση στα private μέλη της υπερκλάσης χρησιμοποιεί τις public μεθόδους της υπερκλάσης.
- Για να δηλώσουμε ότι μια κλάση, έστω Manager είναι υποκλάση ή κληρονομεί την κλάση έστω Employee, γράφουμε: class Manager extends Employee
- Μια κλάση μπορεί να κληρονομεί μόνο μία άλλη κλάση (δεν ισχύει η πολυκληρονομικότητα).
- Μια κλάση μπορεί να κληρονομεί μια κλάση η οποία μπορεί να κληρονομεί μια άλλη κλάση ... κ.λπ.
- Αν μια κλάση δεν κληρονομεί καμία άλλη κλάση, τότε αυτόματα θεωρείται ότι κληρονομεί την κλάση Object η οποία είναι η "μητρική" κλάση από την οποία κληρονομούν όλες οι άλλες.
Για παράδειγμα η έκφραση: class MyClass σημαίνει
class MyClass extends Object
Γενικό παράδειγμα
class Person // η υπερκλάση { private String firstName; private String lastName; public Person(String fn, String ln) //constructor with parameters { firstName=fn; lastName=ln; } public Person() //constructor with no parameters { firstName=""; lastName=""; } public String getFirstName() //public method, returns string { return firstName; } public String getLastName() //public method, returns string { return lastName; } public void setFirstName(String fn) //public method, sets firstName { firstName=fn; } public void setLastName(String ln) //public setter method, sets lastName { lastName=ln; } } class Student extends Person //η Student κληρονομεί την Person { private int am; public Student(String fn, String ln, int a) //κατασκευαστής της Student { setFirstName(fn); //καλεί την κληρονομημένη μέθοδο setFirstName της υπερκλάσης setLastName(ln); //καλεί την κληρονομημένη μέθοδο setLastName της υπερκλάσης am=a; } public void setAm(int a) //public setter method, sets am { am=a; } public int getAm() //public method, returns am { return am; } }
UML Διάγραμμα για κλάση και υποκλάση
Στα uml διαγράμματα μια κλάση έστω Β που κάνει extend μια κλάση έστω Α απεικονίζεται όπως παρακάτω: