java:dynamic_polymorphism_example

Παράδειγμα δυναμικού πολυμορφισμού σε μία ιεραρχία 3 κληρονομούμενων κλάσεων

Ας υποθέσουμε ότι έχετε την ιεραρχία των κλάσεων

  Bycicle
    |
    |---------> MountainBike
                     |
                     |-----------> RacingMountainBike

Οι 3 κλάσεις δίνονται με την σειρά παρακάτω

Bicycle.java
public class Bicycle {
 
    public int cadence;
    public int gear;
    public int speed;
 
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }
 
    public Bicycle() {
        gear = 0;
        cadence = 0;
        speed = 0;
    }
 
    public int getCadence() {
          return cadence;
    }
 
    public int getGear() {
          return gear;
    }
 
    public int getSpeed() {
          return speed;
    }
 
    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;
    }
 
    @Override
    public String toString() {
      return "cadence: "+ cadence+", gear: "+gear+", speed: "+speed;
    }       
}
MountainBike.java
public class MountainBike extends Bicycle {
 
    private int seatHeight;
 
    // the MountainBike subclass has
    // one constructor
    public MountainBike(int startHeight, int startCadence,
                        int startSpeed, int startGear) {
        //super(startCadence, startSpeed, startGear);
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    }   
 
    // the MountainBike subclass has
    // one method
    public void setHeight(int newValue) {
        seatHeight = newValue;
    }
 
    public int getSeatHeight() {
        return seatHeight;
    }
 
    public String toString() {
     return super.toString() + ", seatHeight: " + seatHeight;
    }
}
RacingMountainBike.java
public class RacingMountainBike extends MountainBike {
 
  int racingNumber;
 
  public RacingMountainBike(int startHeight, int startCadence,
                        int startSpeed, int startGear, int num) {
    super(startHeight, startCadence, startSpeed, startGear);
    racingNumber = num;
  }
 
  public String toString() {
    return super.toString() + ", racing number: "+ racingNumber;
  }
 
}

Στο παρακάτω παράδειγμα παρατηρήστε πως ο δυναμικός πολυμορφισμός λειτουργεί ανάμεσα σε κλάσεις που ανήκουν στην ίδια ιεραρχία.

PolymorphismExample.java
public class PolymorphismExample {
 
  public static void main(String args[]) {
    MountainBike bike = new MountainBike(10,20,30,40);
    Bicycle bicycle = bike;
 
    System.out.println(bicycle);
    System.out.println("------");
    System.out.println(bike);
 
    bicycle = new Bicycle(15,25,35); 
    //bicycle = new MountainBike(15,25,35,45);
 
    if( bicycle instanceof MountainBike )
      bike = (MountainBike) bicycle;
 
    System.out.println("------");
    System.out.println(bike);
 
    System.out.println("------");
    RacingMountainBike rbike = new RacingMountainBike(10, 20, 30, 40, 100);
 
    bicycle = rbike;
    System.out.println(bicycle);
 
  }
 
}
java/dynamic_polymorphism_example.txt · Last modified: 2017/02/16 14:01 by gthanos