В данной статье мы рассмотрим полиморфизм. Он представляет собой один из краеугольных камней ООП. Суть полиморфизма заключается в том, что вы можете использовать наследников, как родителей. При этом, если в классе-наследнике был переопределен какой — то метод, то вызовется он.
Рассмотрим простой пример. Пусть у нас есть некоторый класс Shape(фигура), в котором есть только один метод рисовать. Очевидно, что в классе Shape он ничего делать не будет, потому что не понятно, что собственно говоря надо отрисовать, какую фигуру:
1
2
3
4
5
|
public class Shape {
public void draw() {
//ничего не делаем
}
}
|
После этого мы создаем различные классы-наследники: Square (квадрат), Сircle (круг) и Triangle:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Square extends Shape {
public void draw() {
System.out.println("Квадрат");
}
}
public class Сircle extends Shape {
public void draw() {
System.out.println("Круг");
}
}
public class Triangle extends Shape {
public void draw() {
System.out.println("Треугольник");
}
}
|
Как вы могли заметить в наследниках у нас переопределен метод draw.
Теперь увидим, в чем заключается удивительная возможность полиморфизма:
1
2
3
4
5
|
Shape[] a = new Shape[]{new Shape(), new Triangle(), new Square(), new Сircle()};
for(int i = 0; i < a.length; i++) {
a[i].draw();
}
|
Выведет:
Треугольник
Квадрат
Круг
Таким образом каждый класс наследник вызвал именно свой метод draw, вместо того, чтобы вызвать пустой метод draw из класса Shape. В следующих уроках мы поймем зачем может понадобится такой подход.
|