|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Определение словаря полиморфизма относится к принципу в биологии, в которой у организма или разновидностей может быть много различных форм или этапов. Этот принцип может также быть применен к объектно-ориентированному программированию и языкам как язык 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.