Java: Полиморфизм и переопределение методов

Полиморфизм: переопределение методов в классах-наследниках

Часто функциональность методов базового класса требует небольших модификаций в классах-наследниках. Например, метод 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() сначала вызывает родительский метод, затем добавляет информацию о загрузке грузовика и возвращает объединенную строку.

Важные рекомендации

При переопределении методов важно сохранять базовую функциональность родительского метода. Если метод в родительском классе устанавливает значения, то в классе-наследнике он также должен устанавливать значения, а не выводить информацию. Изменение базовой функциональности может снизить читаемость и понимаемость кода.

Полиморфизм – мощный инструмент ООП, позволяющий гибко адаптировать поведение методов в классах-наследниках. Правильное использование полиморфизма способствует созданию более чистых, понятных и поддерживаемых программ. Не забывайте о важности сохранения базовой функциональности при переопределении методов.

Что будем искать? Например,программа