java:inheritance
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:inheritance [2017/01/30 14:03] – gthanos | java:inheritance [2022/03/11 05:21] (current) – gthanos | ||
---|---|---|---|
Line 5: | Line 5: | ||
Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (// | Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (// | ||
- | {{ :java:super_sub_class.jpg | }} | + | {{ :java:inheritance-1.png | }} |
- | Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (// | + | Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (// |
- | <code java Bicycle.java> | + | <code java BasicRectangle.java> |
- | public class Bicycle | + | public class BasicRectangle |
- | + | ||
- | private int cadence; | + | |
- | private int gear; | + | |
- | private int speed; | + | |
- | + | ||
- | public Bicycle(int startCadence, | + | |
- | gear = startGear; | + | |
- | cadence = startCadence; | + | |
- | speed = startSpeed; | + | |
- | } | + | |
| | ||
- | public | + | |
- | | + | int height; |
- | } | + | |
+ | public BasicRectangle(int initWidth, int initHeight) { | ||
+ | width = initWidth; | ||
+ | | ||
+ | } | ||
+ | |||
+ | public void setWidth(int newWidth ) { | ||
+ | width = newWidth; | ||
+ | | ||
| | ||
- | | + | public void setHeight(int newHeight ) { |
- | return | + | height = newHeight; |
- | } | + | } |
+ | |||
+ | | ||
+ | return | ||
+ | } | ||
| | ||
- | | + | |
- | return | + | return |
- | } | + | } |
+ | |||
+ | public String toString() { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
- | | + | <code java Point.java> |
- | | + | class Point { |
- | } | + | int x; // x coordinate |
- | + | int y; // y coordinate | |
- | | + | |
- | | + | |
- | } | + | |
- | + | | |
- | | + | |
- | speed -= decrement; | + | |
- | } | + | int getX() { |
- | + | | |
- | public | + | } |
- | | + | |
- | } | + | |
- | | + | |
+ | } | ||
+ | |||
+ | int getY() { | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | public | ||
+ | | ||
+ | } | ||
} | } | ||
</ | </ | ||
- | <code java MountainBike.java> | + | <code java Rectangle.java> |
- | public class MountainBike | + | public class Rectangle |
- | + | ||
- | private int seatHeight; | + | |
- | + | ||
- | // the MountainBike subclass has | + | |
- | // one constructor | + | |
- | public MountainBike(int startHeight, | + | |
- | int startSpeed, int startGear) { | + | |
- | super(startCadence, | + | |
- | seatHeight = startHeight; | + | |
- | } | + | |
- | + | ||
- | // the MountainBike subclass has | + | |
- | // one method | + | |
- | public void setHeight(int newValue) { | + | |
- | seatHeight = newValue; | + | |
- | } | + | |
| | ||
- | | + | Point origin; |
- | return | + | |
- | } | + | |
+ | super(initWidth, initHeight); | ||
+ | origin = initOrigin; | ||
+ | } | ||
+ | |||
+ | public Rectangle(int initWidth, int initHeight, int originX, int originY) { | ||
+ | | ||
+ | origin = new Point(originX, | ||
+ | } | ||
+ | |||
+ | public void setOrigin(Point newOrigin) { | ||
+ | origin = newOrigin; | ||
+ | } | ||
+ | |||
+ | public Point getOrigin() { | ||
+ | | ||
+ | } | ||
+ | |||
+ | int area() { | ||
+ | | ||
+ | } | ||
+ | |||
+ | // Move rectangle origin by dx,dy | ||
+ | public void moveOrigin(int dx, int dy) { | ||
+ | origin.setX( origin.getX() + dx ); | ||
+ | origin.setY( origin.getY() + dy ); | ||
+ | } | ||
+ | |||
+ | public String toString() { | ||
+ | String str = origin.toString() + " "; | ||
+ | str = str + super.toString(); | ||
+ | return str; | ||
+ | | ||
} | } | ||
</ | </ | ||
+ | <WRAP tip 80% center round> | ||
+ | |||
+ | === Παρατηρήσεις === | ||
+ | |||
+ | * Η κλάση // | ||
+ | * Βασικό χαρακτηριστικό της κληρονομικότητας είναι ότι η κληρονομούμενη κλάση έχει όλα τα χαρακτηριστικά της γονικής κλάσης. Υπό αυτή την έννοια, | ||
+ | * Παρατηρήστε τη δεσμευμένη λέξη //super// ως πρώτη εντολή του κάθε κατασκευαστή. Μέσω της κλήσης //super// καλείται ο κατασκευαστής της γονικής κλάσης. | ||
+ | </ | ||
===== Προσβασιμότητα των κληρονομούμενων πεδίων ===== | ===== Προσβασιμότητα των κληρονομούμενων πεδίων ===== | ||
Line 92: | Line 137: | ||
* Να χρησιμοποιήσουμε τα πεδία της γονικής κλάσης στα οποία έχουμε πρόσβαση (public, protected, package-private στο ίδιο package). | * Να χρησιμοποιήσουμε τα πεδία της γονικής κλάσης στα οποία έχουμε πρόσβαση (public, protected, package-private στο ίδιο package). | ||
* Να ορίσουμε νέα πεδία. | * Να ορίσουμε νέα πεδία. | ||
- | * Να ορίσουμε νέα πεδία που να έχουν ίδιο όνομα με πεδία της γονικής κλάσης. Σε αυτή την περίπτωση " | ||
* Να χρησιμοποιήσουμε τις μεθόδους της γονικής κλάσης στις οποίες έχουμε πρόσβαση (public, protected, package-private στο ίδιο package). | * Να χρησιμοποιήσουμε τις μεθόδους της γονικής κλάσης στις οποίες έχουμε πρόσβαση (public, protected, package-private στο ίδιο package). | ||
* Μπορούμε να γράψουμε νέες στατικές ή μη στατικές μεθόδους για τη υποκλάση. | * Μπορούμε να γράψουμε νέες στατικές ή μη στατικές μεθόδους για τη υποκλάση. | ||
Line 99: | Line 143: | ||
* Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | * Μπορούμε να γράψουμε κατασκευαστές της υποκλάσης που χρησιμοποιούν κατασκευαστές της γονικής κλάσης. | ||
- | |Προηγούμενο: | + | ===== ΔΕΝ συνιστάται να κάνουμε σε μία υποκλάση... ===== |
+ | * Να ορίσουμε νέα πεδία που να έχουν ίδιο όνομα με πεδία της γονικής κλάσης. Σε αυτή την περίπτωση " | ||
+ | |||
+ | |Προηγούμενο: | ||
java/inheritance.1485785010.txt.gz · Last modified: 2017/01/30 14:03 by gthanos