Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Интерфейсы и Наследование
Раздел: Наследование
Полиморфизм
Домашняя страница > Изучение Языка Java > Интерфейсы и Наследование

Полиморфизм

Определение словаря полиморфизма относится к принципу в биологии, в которой у организма или разновидностей может быть много различных форм или этапов. Этот принцип может также быть применен к объектно-ориентированному программированию и языкам как язык Java. Подклассы class могут определить свои собственные уникальные поведения и все же совместно использовать часть той же самой функциональности родительского class.

Полиморфизм может демонстрироваться с незначительной модификацией к Bicycle class. Например, a printDescription метод мог быть добавлен к class, который выводит на экран все данные, в настоящий момент хранившие в экземпляре.

public void printDescription(){
    System.out.println("\nBike is " + "in gear " + this.gear
        + " with a cadence of " + this.cadence +
        " and travelling at a speed of " + this.speed + ". ");
}

Чтобы демонстрировать полиморфные функции на языке Java, расширитесь Bicycle class с a MountainBike и a RoadBike class. Для MountainBike, добавьте поле для suspension, который является a String значение, которое указывает, есть ли у велосипеда передний амортизатор, Front. Или, у велосипеда есть амортизатор передней и задней части, Dual.

Вот обновленный class:

public class MountainBike extends Bicycle {
    private String suspension;

    public MountainBike(
               int startCadence,
               int startSpeed,
               int startGear,
               String suspensionType){
        super(startCadence,
              startSpeed,
              startGear);
        this.setSuspension(suspensionType);
    }

    public String getSuspension(){
      return this.suspension;
    }

    public void setSuspension(String suspensionType) {
        this.suspension = suspensionType;
    }

    public void printDescription() {
        super.printDescription();
        System.out.println("The " + "MountainBike has a" +
            getSuspension() + " suspension.");
    }
} 

Отметьте переопределенный printDescription метод. В дополнение к информации, предоставленной прежде, дополнительные данные о приостановке включаются в вывод.

Затем, создайте RoadBike class. Поскольку у дороги или мчащихся велосипедов есть тощие шины, добавьте атрибут, чтобы отследить шину width. Вот RoadBike class:

public class RoadBike extends Bicycle{
    // In millimeters (mm)
    private int tireWidth;

    public RoadBike(int startCadence,
                    int startSpeed,
                    int startGear,
                    int newTireWidth){
        super(startCadence,
              startSpeed,
              startGear);
        this.setTireWidth(newTireWidth);
    }

    public int getTireWidth(){
      return this.tireWidth;
    }

    public void setTireWidth(int newTireWidth){
        this.tireWidth = newTireWidth;
    }

    public void printDescription(){
        super.printDescription();
        System.out.println("The RoadBike"
            " has " + getTireWidth() +
            " MM tires.");
    }
}

Отметьте это еще раз, printDescription метод был переопределен. На сей раз информация о шине width выводится на экран.

Чтобы подвести итог, есть три класса: Bicycle, MountainBike, и RoadBike. Два подкласса переопределяют printDescription метод и печатает уникальную информацию.

Вот тестовая программа, которая создает три Bicycle переменные. Каждая переменная присваивается одному из трех велосипедных классов. Каждая переменная тогда печатается.

public class TestBikes {
  public static void main(String[] args){
    Bicycle bike01, bike02, bike03;

    bike01 = new Bicycle(20, 10, 1);
    bike02 = new MountainBike(20, 10, 5, "Dual");
    bike03 = new RoadBike(40, 20, 8, 23);

    bike01.printDescription();
    bike02.printDescription();
    bike03.printDescription();
  }
}

Следующее является выводом из тестовой программы:

Bike is in gear 1 with a cadence of 20 and travelling at a speed of 10. 

Bike is in gear 5 with a cadence of 20 and travelling at a speed of 10. 
The MountainBike has a Dual suspension.

Bike is in gear 8 with a cadence of 40 and travelling at a speed of 20. 
The RoadBike has 23 MM tires.

Виртуальная машина Java (JVM) вызывает соответствующий метод для объекта, который упоминается в каждой переменной. Это не вызывает метод, который определяется типом переменной. Это поведение упоминается как виртуальный вызов метода и демонстрирует аспект важных функций полиморфизма на языке Java.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Переопределение и Сокрытие Методов
Следующая страница: Сокрытие Полей