Центр дистанционного обучения
Полиморфизм – зачем?
public class Circle { |
|
public class Rectangle { |
private double x; |
|
private double x; |
private double y; |
|
private double y; |
private double radius; |
|
private double width; |
|
|
private double height; |
public double getArea() { |
|
public double getArea() { |
return Math.PI * radius * radius; |
|
return width * height; |
} |
|
} |
// конструкторы/get/set |
|
// конструкторы/get/set |
} |
|
} |
|
|
|
online.mirea.ru
Центр дистанционного обучения
Полиморфизм – зачем?
Как создать массив, содержащий и круги, и прямоугольники?
CircleOrRectangle[] shapes = …;
class CircleOrRectangle {
…
}
online.mirea.ru
Центр дистанционного обучения
Полиморфизм – зачем?
Минусы – сложно расширять: CircleOrRectangleOrTriangleOrStar[] shapes = …; class CircleOrRectangleOrTriangleOrStar {
…// должен включать свойства всех // возможных фигур
}
online.mirea.ru
Центр дистанционного обучения
Полиморфизм – зачем?
public class Shape { |
|
private double x; |
Класс-предок |
|
|
private double y; |
|
} |
|
|
|
public class Circle extends Shape { |
|
public class Rectangle extends Shape { |
private double radius; |
|
private double width; |
|
|
private double height; |
public double getArea() { |
|
|
return Math.PI * radius * radius; |
|
public double getArea() { |
} |
|
return width * height; |
} |
|
} |
|
|
} |
|
|
|
Классы-потомки
online.mirea.ru
Центр дистанционного обучения
Полиморфизм – зачем?
class Circle extends Shape
extends выражает отношение “является” или “является частным случаем”, “is a”.
В данном случае Круг является Фигурой (Circle is a Shape).
Circle c1 = new Circle(0, 0, 2);
Shape s1 = c1; // корректное присваивание
online.mirea.ru