java:super_keyword

Differences

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

Link to this comparison view

java:super_keyword [2016/02/26 11:15]
java:super_keyword [2016/02/26 11:15] (current)
Line 1: Line 1:
 +====== Ο τελεστής super ======
  
 +Σε αναλογία με τον τελεστή **this**, ο τελεστής **super** δείχνει στο αντικείμενο της γονικής κλάσης. Προϋπόθεση για την χρήση του τελεστή **super** είναι να υφίσταται γονική κλάση μέσω της διαδικασίας της κληρονομικότητας. ​
 +
 +===== Πρόσβαση στους κατασκευαστές της γονικής κλάσης μέσω του τελεστή super =====
 +
 +Λαμβάνοντας κώδικα από το προηγούμενο παράδειγμα του ποδηλάτου έχουμε τα εξής:
 +
 +<code java Bicycle.java>​
 +    public class Bicycle {
 +     
 +        // the Bicycle class has
 +        // three fields
 +        public int cadence;
 +        public int gear;
 +        public int speed;
 +     
 +        // the Bicycle class has
 +        // one constructor
 +        public Bicycle(int startCadence,​ int startSpeed, int startGear) {
 +            gear = startGear;
 +            cadence = startCadence;​
 +            speed = startSpeed;
 +        }
 +     
 +        // the Bicycle class has
 +        // four methods
 +        public void setCadence(int newValue) {
 +            cadence = newValue;
 +        }
 +     
 +        public void setGear(int newValue) {
 +            gear = newValue;
 +        }
 +     
 +        public void applyBrake(int decrement) {
 +            speed -= decrement;
 +        }
 +     
 +        public void speedUp(int increment) {
 +            speed += increment;
 +        }
 +     
 +    }
 +</​code>​
 +
 +<code java MountainBike.java>​
 +public class MountainBike extends Bicycle {
 + 
 +    // the MountainBike subclass has
 +    // one field
 +    public int seatHeight;
 + 
 +    // the MountainBike subclass has
 +    // one constructor
 +    public MountainBike(int startHeight,​ int startCadence,​
 +                        int startSpeed, int startGear) {
 +        super(startCadence,​ startSpeed, startGear);
 +        seatHeight = startHeight;​
 +    }   
 + 
 +    // the MountainBike subclass has
 +    // one method
 +    public void setHeight(int newValue) {
 +        seatHeight = newValue;
 +    }   
 + 
 +}
 +</​code>​
 +
 +H χρήση του τελεστή super χρησιμοποιείται για να προσπελάσει τον κατασκευαστή της γονικής κλάσης και να αρχικοποιήσει τις μεταβλητές που ανήκουν στην κλάση αυτή.
 +
 +===== Πρόσβαση σε πεδία και μεθόδους των αντικειμένων της γονικής κλάσης μέσω του τελεστή super =====
 +
 +Ο κατασκευαστής της κλάσης ''​MountainBike''​ θα μπορούσε να γραφεί ως εξής.
 +
 +<code java MountainBike.java>​
 +public class MountainBike extends Bicycle {
 + 
 +    // the MountainBike subclass has
 +    // one field
 +    public int seatHeight;
 + 
 +    // the MountainBike subclass has
 +    // one constructor
 +    public MountainBike(int startHeight,​ int startCadence,​
 +                        int startSpeed, int startGear) {
 +        super(startCadence,​ startSpeed, startGear);
 +        super.cadence = startCadence;​
 +        super.speed = startSpeed;
 +        super.gear = startGear;
 +        seatHeight = startHeight;​
 +    }   
 + 
 +    // the MountainBike subclass has
 +    // one method
 +    public void setHeight(int newValue) {
 +        seatHeight = newValue;
 +    }   
 + 
 +}
 +</​code>​
 +
 +Συμπερασματικά,​ ο τελεστής **super** δείχνει στο αντικείμενο της γονικής κλάσης και χρησιμοποιείται για να προσπελαστούν δεδομένα ή μεταβλητές που ανήκουν στο τμήμα του τρέχοντος αντικειμένου που αφορά την γονική κλάση. ​
 +
 +<WRAP important>​Απαραίτητη προϋποθεση για την χρήση του τελεστη **super** είναι τα παιδιά της γονικής κλάσης να έχουν πρόσβαση στα δεδομένα ή τις μεθόδους της γονικής κλάσης. Για να γίνει αυτό, τα πεδία και οι μέθοδοι της γονικής κλάσης που θέλουμε να προσπελάσουμε δεν θα πρέπει να έχουν των προσδιοριστή πρόσβασης **private**. Περισσότερα για τους προσδιοριστές πρόσβασης θα δούμε παρακάτω,​ όταν θα έχουμε εξήγήσει την φιλοσοφία των πακέτων στην γλώσσα JAVA.
 +</​WRAP>​
java/super_keyword.txt · Last modified: 2016/02/26 11:15 (external edit)