Ответ
Полиморфизм — это способность объектов с одинаковой спецификацией (интерфейсом/родительским классом) иметь различную реализацию. В Java существует два основных типа:
- Полиморфизм во время выполнения (Runtime): Переопределение методов (override).
- Полиморфизм во время компиляции (Compile-time): Перегрузка методов (overload).
Пример runtime-полиморфизма через переопределение метода:
// Базовый класс (общий тип)
class Shape {
void draw() {
System.out.println("Drawing a generic shape");
}
}
// Производные классы
class Circle extends Shape {
@Override
void draw() {
System.out.println("Drawing a circle");
}
}
class Square extends Shape {
@Override
void draw() {
System.out.println("Drawing a square");
}
}
public class PolymorphismDemo {
public static void main(String[] args) {
// Ссылка типа Shape, объекты разных типов
Shape shape1 = new Circle(); // Upcasting
Shape shape2 = new Square(); // Upcasting
Shape shape3 = new Shape();
// Один и тот же метод вызывается, но поведение разное
shape1.draw(); // Вывод: Drawing a circle
shape2.draw(); // Вывод: Drawing a square
shape3.draw(); // Вывод: Drawing a generic shape
}
}
Ключевой момент: Компилятор видит вызов shape1.draw() как метод класса Shape, но JVM во время выполнения определяет фактический тип объекта (Circle) и выполняет его версию метода. Это и есть полиморфизм.