Ответ
Перегрузка метода (Method Overloading) — это создание нескольких методов в одном классе с одинаковым именем, но разными параметрами (типом, количеством или порядком). Выбор конкретного метода происходит на этапе компиляции (статический полиморфизм).
Переопределение метода (Method Overriding) — это замена реализации метода, унаследованного от родительского класса, в дочернем классе. Сигнатура метода (имя, параметры, возвращаемый тип) должна совпадать. Выбор метода происходит во время выполнения (динамический полиморфизм).
| Ключевые различия: | Критерий | Перегрузка (Overloading) | Переопределение (Overriding) |
|---|---|---|---|
| Класс | В пределах одного класса | В разных классах (иерархия наследования) | |
| Сигнатура | Должна отличаться | Должна совпадать | |
| Тип полиморфизма | Статический (Compile-time) | Динамический (Runtime) | |
| Аннотация | Не требуется | Рекомендуется @Override |
|
| Возвращаемый тип | Может отличаться | Должен быть ковариантным или одинаковым |
Пример перегрузки:
class Printer {
void print(int x) { System.out.println("Целое: " + x); }
void print(String s) { System.out.println("Строка: " + s); } // Перегрузка
void print(int x, String s) { System.out.println(x + ": " + s); } // Перегрузка
}
Пример переопределения:
class Animal {
void makeSound() {
System.out.println("Животное издает звук");
}
}
class Dog extends Animal {
@Override
void makeSound() { // Переопределение
System.out.println("Гав!");
}
}