Ответ
Переопределение (Override) — это механизм полиморфизма, при котором метод в дочернем классе предоставляет свою собственную реализацию метода, уже существующего в родительском классе. Сигнатура метода (имя, параметры, возвращаемый тип) должна совпадать.
Перегрузка (Overload) — это создание нескольких методов в одном классе с одинаковым именем, но разными параметрами (типом, количеством или порядком). Возвращаемый тип может отличаться, но только разницы в нём недостаточно для перегрузки.
Ключевые отличия:
- Цель: Override меняет поведение унаследованного метода. Overload расширяет функциональность метода для разных входных данных.
- Связь с наследованием: Override требует иерархии классов. Overload может быть в пределах одного класса.
- Время разрешения: Override разрешается во время выполнения (динамический полиморфизм). Overload разрешается во время компиляции (статический полиморфизм).
Пример на Java:
class Animal {
void makeSound() {
System.out.println("Some generic animal sound");
}
}
class Dog extends Animal {
// Override: та же сигнатура, другая реализация.
@Override
void makeSound() {
System.out.println("Bark!");
}
// Overload: то же имя, разные параметры.
void makeSound(int volume) {
System.out.println("Bark at volume: " + volume);
}
}