Этот вопрос проверяет понимание базовых принципов ООП и различий между полиморфизмом времени компиляции и выполнения.
Override относится к полиморфизму времени выполнения.Overload относится к полиморфизму времени компиляции.
Оба механизма позволяют вызывать методы с одинаковым именем, но работают по разным правилам.Override зависит от фактического типа объекта.Overload зависит от сигнатуры метода и типа аргументов.
Чтобы понять различия, сначала разберем общее.
Полиморфизм — это способность вызывать разные реализации метода через единый интерфейс.
Overload — это выбор метода на этапе компиляции.
Условия:
Одинаковое имя метода
Разные параметры (тип, количество, порядок)
Пример:
class Calculator {
int sum(int a, int b) {
return a + b;
}
double sum(double a, double b) {
return a + b;
}
}
Особенности:
Не зависит от наследования
Выбор метода происходит компилятором
Override — это выбор метода во время выполнения.
Условия:
Наследование
Совпадение сигнатуры метода
Нельзя уменьшать уровень доступа
Пример:
class Animal {
void sound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark");
}
}
Вызов зависит от реального типа объекта, а не от типа ссылки.
Override — полиморфизм времени выполнения
Overload — полиморфизм времени компиляции
Оба механизма относятся к полиморфизму, но решают разные задачи и работают на разных этапах выполнения программы.