Ответ
Полиморфизм в Java реализуется через наследование классов или реализацию интерфейсов, где метод, объявленный в родительском типе, по-разному выполняется в дочерних типах.
Ключевые шаги:
- Создать общий тип (абстрактный класс или интерфейс) с объявленным методом.
- Создать конкретные классы, которые наследуют или реализуют этот тип.
- Переопределить (
@Override) общий метод в каждом конкретном классе. - Использовать ссылку на общий тип для работы с объектами разных конкретных классов.
Пример с интерфейсом:
interface Shape {
double getArea(); // Общий метод
}
class Circle implements Shape {
private double radius;
public Circle(double r) { this.radius = r; }
@Override
public double getArea() {
return Math.PI * radius * radius; // Своя реализация
}
}
class Square implements Shape {
private double side;
public Square(double s) { this.side = s; }
@Override
public double getArea() {
return side * side; // Другая реализация
}
}
// Использование полиморфизма
Shape shape1 = new Circle(5.0);
Shape shape2 = new Square(4.0);
System.out.println(shape1.getArea()); // 78.5398...
System.out.println(shape2.getArea()); // 16.0
Почему это работает: Во время выполнения (Runtime) JVM определяет фактический тип объекта и вызывает соответствующую переопределенную версию метода. Это основа позднего связывания (late binding).