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 revisionPrevious revision
Next revision
Previous revision
java:inheritance [2020/03/27 12:23] – [Κληρονομικότητα] gthanosjava:inheritance [2022/03/11 05:21] (current) 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) { +  public String toString() { 
-        this.color = color; +    return "width: "+width+", height: "+height
-    } +  }
-     +
-    public String toString() { +
-        return "frame: "+frameSize+", gears: "+gearsNumber+", color: "+color+
-    }+
 } }
 </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); +  } 
-    } +   
-     +  int area() { 
-    public String toString() { +    return width * height; 
-        String str = ", hasSuspension: " + (suspension ? "yes: "no")+  } 
-        return super.toString() + str+    
-    }+  // 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; 
 +  }
 } }
 </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.1585311825.txt.gz · Last modified: 2020/03/27 12:23 (external edit)