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.