User Tools

Site Tools


java:inheritance

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
java:inheritance [2020/03/27 10:58]
gthanos
java:inheritance [2021/04/02 14:19]
gthanos
Line 5: Line 5:
 Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (//subclass//) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (//superclass//) της κληρονομούμενης κλάσης. Κάθε κλάση που κληρονομεί από μία άλλη κλάση ονομάζεται υποκλάση (//subclass//) της γονικής κλάσης από την οποία κληρονομεί. Αντίστοιχα, η γονική κλάση ονομάζεται υπερκλάση (//superclass//) της κληρονομούμενης κλάσης.
  
-{{  :java:super_sub_class.jpg  | }}+{{  :java:inheritance-1.png  | }}
  
-Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (//subclass//) μπορεί να κληρονομεί __**ΜΟΝΟ ΜΙΑ**__ άλλη κλάση. Αντίστροφα μία κλάση (//superclass//) μπορεί να κληρονομείται από πολλές διαφορετικές κλάσεις. Παρακάτω δίνουμε ένα παράδειγμα κληρονομικότηταςόπου η κλάση ''MountainBike'' αποτελεί εξειδίκευση της κλάσης ''Bicycle''.+Όπως φαίνεται και στο παραπάνω σχήμα μία κλάση (//subclass//) μπορεί να κληρονομεί __**ΜΟΝΟ ΜΙΑ**__ άλλη κλάση. Αντίστροφα μία κλάση (//superclass//) μπορεί να κληρονομείται από πολλές διαφορετικές κλάσεις. Παρακάτω δίνουμε ένα παράδειγμα κληρονομικότητας ως συνέχεια των προηγούμενων ενοτήτων. Ορίζουμε την κλάση ''BasicRectangle'' η οποία αποτελεί το απλό ορθογώνιο παραλληλόγραμμο που γνωρίσαμε στην αρχή και την κλάση ''Rectangle'' που αποτελεί εξειδίκευση της κλάσης ''BasicRectangle'' ορίζοντας επιπλέον το πεδίο ''origin''.
  
-<code java Bicycle.java> +<code java BasicRectangle.java> 
-public class Bicycle { +public class BasicRectangle {
-         +
-    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() { +  int width; 
-          return frameSize+  int height; 
-    }+  
 +  public BasicRectangle(int initWidth, int initHeight) { 
 +    width = initWidth
 +    height = initHeight; 
 +  } 
 + 
 +  public void setWidth(int newWidth ) { 
 +    width = newWidth; 
 +  }
          
-    public int getGearsNumber() { +  public void setHeight(int newHeight ) { 
-          return gearsNumber+    height = newHeight; 
-    }+  } 
 +   
 +  public int getWidth() { 
 +    return width
 +  }
          
-    public String getColor() { +  public int getHeight() { 
-        return color+    return height
-    +  
-     +   
-    public void setColor(String color) { +  int area() { 
-        this.color = color+    return width * height
-    +  
-     +   
-    public String toString() { +  public String toString() { 
-        return "frame: "+frameSize+", gears: "+gearsNumber+", color: "+color+    return "width: "+width+", height: "+height
-    }+  }
 } }
 </code> </code>
  
-<code java MountainBike.java> +<code java Point.java> 
-public class MountainBike extends Bicycle {+class Point { 
 +  int x;   // x coordinate 
 +  int y;   // y coordinate 
 +   
 +  public Point(int xPos, int yPos) { 
 +    x = xPos; 
 +    y = yPos; 
 +  } 
 +   
 +  int getX() { 
 +    return x; 
 +  } 
 +   
 +  void setX(int xPos) { 
 +    x = xPos; 
 +  } 
 +   
 +  int getY() { 
 +    return y; 
 +  } 
 +   
 +  void setY(int yPos) { 
 +    y = yPos; 
 +  } 
 +   
 +  public String toString() { 
 +    return "("+x+","+y+")"; 
 +  } 
 +
 +</code> 
 + 
 +<code java Rectangle.java> 
 +public class Rectangle extends BasicRectangle {
          
-    private boolean suspension;+  Point origin;
          
-    public MountainBike(int frameSize, int gearsNumberString color, boolean hasSuspension) { +  public Rectangle(int initWidth, int initHeightPoint initOrigin) { 
-        super(frameSizegearsNumber, color); +    super(initWidthinitHeight); 
-        this.suspension hasSuspension+    origin initOrigin; 
-    }+  } 
 +   
 +  public Rectangle(int initWidth, int initHeight, int originX, int originY) { 
 +    super(initWidth, initHeight); 
 +    origin = new Point(originX,originY); 
 +  }
          
-    public boolean hasSuspension() { +  public void setOrigin(Point newOrigin) { 
-        return suspension+    origin = newOrigin
-    +  
-     +   
-    public void updateColor(String color) { +  public Point getOrigin() { 
-        //this.color = color;  // δεν έχουμε πρόσβαση στο private πεδίο color +    return origin; 
-        setColor(color); +  } 
-    } +    
-     +  // Move rectangle origin by dx,dy 
-    public String toString() { +  public void moveOrigin(int dx, int dy) { 
-        String str = ", hasSuspension:suspension ? "yes" : "no"; +    origin.setX( origin.getX() + dx ); 
-        return super.toString() + str+    origin.setY( origin.getY() + dy ); 
-    }+  
 +   
 +  public String toString() { 
 +    String str = origin.toString() + " "; 
 +    str = str + super.toString(); 
 +    return str; 
 +  }
 } }
 </code> </code>
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
 +
 === Παρατηρήσεις === === Παρατηρήσεις ===
  
-  * Η κλάση Bicycle έχει τα τρία πεδία //frameSizegearsNumber// και //color// ενώ η κλάση //MountainBike// διαθέτει τα πεδία αυτά και επιπλέον το πεδίο //suspension//+  * Η κλάση //BasicRectangle// έχει τα πεδία //widthheight//ενώ η κλάση //Rectangle// διαθέτει τα πεδία αυτά και επιπλέον το πεδίο //origin//. 
-  * Τα πεδία της κλάσης //Bicycle// είναι private. H πρόσβαση στα πεδία αυτά μπορεί να γίνει μόνο μέσω των public μεθόδων που διαθέτει η κλάση και έχοντας πρόσβαση απευθείας πάνω στα συγκεκριμένα πεδία+  * Βασικό χαρακτηριστικό της κληρονομικότητας είναι ότι η κληρονομούμενη κλάση έχει όλα τα  χαρακτηριστικά της γονικής κλάσης. Υπό αυτή την έννοια, τα αντικείμενα της κλάσης //Rectangle// είναι και του τύπου //BasicRectangle//
-  * Βασικό χαρακτηριστικό της κληρονομικότητας είναι ότι η κληρονομούμενη κλάση έχει όλα τα //protected//, //package private// (αν οι δύο κλάσεις βρίσκονται στο ίδιο πακέτο) και //public// χαρακτηριστικά της γονικής κλάσης. Μπορεί να πει κανείς ότι η κλάση MountainBike είναι και Bicycle.+  * Παρατηρήστε τη δεσμευμένη λέξη //super// ως πρώτη εντολή του κάθε κατασκευαστή. Μέσω της κλήσης //super// καλείται ο κατασκευαστής της γονικής κλάσης.
 </WRAP> </WRAP>
 ===== Προσβασιμότητα των κληρονομούμενων πεδίων ===== ===== Προσβασιμότητα των κληρονομούμενων πεδίων =====
java/inheritance.txt · Last modified: 2022/03/11 05:21 by gthanos