Переопределение метода (method overriding) в Java происходит, когда подкласс предоставляет свою собственную реализацию метода, который уже определен в его суперклассе. Метод в подклассе должен иметь ту же подпись (имя метода и параметры), что и метод в суперклассе. Переопределение метода позволяет подклассу изменять или расширять поведение метода суперкласса.
Основные правила переопределения метода:
- Метод в подклассе должен иметь ту же сигнатуру, что и метод в суперклассе (то есть, то же имя, те же параметры и тот же тип возвращаемого значения или его подтип).
- Метод в подклассе должен быть не менее доступным, чем метод в суперклассе. Например, если метод суперкласса объявлен как
public
, то метод в подклассе не может бытьprotected
илиprivate
. - Методы, которые объявлены как
final
илиstatic
в суперклассе, не могут быть переопределены.
Пример переопределения метода
class Animal {
void makeSound() {
System.out.println("Some generic animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow");
}
}
public class MethodOverridingExample {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog();
Animal myCat = new Cat();
myAnimal.makeSound(); // Output: Some generic animal sound
myDog.makeSound(); // Output: Bark
myCat.makeSound(); // Output: Meow
}
}
Объяснение
- Класс
Animal
: Содержит методmakeSound()
, который выводит “Some generic animal sound”. - Класс
Dog
: Переопределяет методmakeSound()
, чтобы вывести “Bark”. - Класс
Cat
: Переопределяет методmakeSound()
, чтобы вывести “Meow”. - Метод
main
:- Создает объекты
Animal
,Dog
, иCat
. - При вызове метода
makeSound()
для каждого объекта вызывается версия метода, соответствующая типу объекта во время выполнения.
- Создает объекты
Таким образом, переопределение методов позволяет подклассам предоставлять специализированные версии методов суперклассов, обеспечивая полиморфизм и расширяемость в объектно-ориентированном программировании.