Полиморфизм: переопределение методов в классах-наследниках
Часто функциональность методов базового класса требует небольших модификаций в классах-наследниках. Например, метод setFiles() устанавливает четыре поля, а в классе-наследнике, допустим, Truck, необходимо установить пять полей. Аналогично, метод getFiles() в базовом классе выводит определённые значения, а в классе-наследнике желательно добавить вывод дополнительного значения. Полиморфизм позволяет переопределять методы в классах-наследниках, добавляя или изменяя их функциональность.
Реализация полиморфизма в Java
Для переопределения метода используется аннотация @Override. Рассмотрим пример переопределения метода setFiles() в классе-наследнике:
@Override
void setFiles(/* параметры */) {
super.setFiles(/* параметры */);
System.out.println("Это наш второй метод");
// Дополнительная логика
}
Аннотация @Override указывает компилятору, что переопределяется метод из родительского класса. В примере вызывается родительский метод setFiles() с помощью super.setFiles(), а затем добавляется дополнительный функционал.
Изменение сигнатуры метода
Если при переопределении метода меняется количество или типы параметров (сигнатура метода), аннотация @Override становится некорректной. В этом случае фактически создаётся новый метод с тем же именем, но с другой сигнатурой.
Например, добавление параметра isLoaded типа boolean в метод setFiles() потребует удаления аннотации @Override. При вызове setFiles() с четырьмя параметрами будет вызван метод из родительского класса, а с пятью – из класса-наследника.
Переопределение метода getFiles()
Рассмотрим переопределение метода getFiles(). В классе-наследнике можно вызвать родительский метод, добавить дополнительную логику и вернуть результирующую строку:
@Override
String getFiles() {
String parentResult = super.getFiles();
String additionalInfo = "Грузовик загружен";
return parentResult + "\n" + additionalInfo;
}
Здесь getFiles() сначала вызывает родительский метод, затем добавляет информацию о загрузке грузовика и возвращает объединенную строку.
Важные рекомендации
При переопределении методов важно сохранять базовую функциональность родительского метода. Если метод в родительском классе устанавливает значения, то в классе-наследнике он также должен устанавливать значения, а не выводить информацию. Изменение базовой функциональности может снизить читаемость и понимаемость кода.
Полиморфизм – мощный инструмент ООП, позволяющий гибко адаптировать поведение методов в классах-наследниках. Правильное использование полиморфизма способствует созданию более чистых, понятных и поддерживаемых программ. Не забывайте о важности сохранения базовой функциональности при переопределении методов.