Ответ
Переопределение методов (method overriding) является ключевым механизмом реализации полиморфизма (а точнее, полиморфизма во время выполнения — runtime polymorphism).
Как это работает:
- Наследование создаёт иерархию классов.
- Переопределение позволяет подклассу предоставить свою специфическую реализацию метода, уже определённого в суперклассе.
- Полиморфизм позволяет ссылке суперкласса указывать на объект подкласса и вызывать переопределённую версию метода.
Пример на Java:
class Shape {
void draw() {
System.out.println("Drawing a 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 Main {
public static void main(String[] args) {
Shape myShape = new Circle(); // Полиморфная ссылка
myShape.draw(); // Вывод: "Drawing a circle"
myShape = new Square();
myShape.draw(); // Вывод: "Drawing a square"
}
}
Почему это важно: Полиморфизм через переопределение позволяет писать гибкий и расширяемый код, где поведение определяется типом объекта, а не типом ссылки.