Ответ
Переопределение метода (method overriding) — это один из ключевых механизмов полиморфизма в ООП, который позволяет классу-наследнику предоставить собственную реализацию метода, уже существующего в родительском классе.
Основная цель — изменить или расширить поведение унаследованного метода, адаптировав его под нужды дочернего класса.
Условия для переопределения:
- Метод должен иметь то же имя и ту же сигнатуру (набор параметров), что и в родительском классе.
- Класс должен быть наследником того класса, чей метод переопределяется.
Пример на Python:
class Shape:
def area(self):
print("Вычисление площади для базовой фигуры")
return 0
class Square(Shape):
def __init__(self, side):
self.side = side
# Переопределение метода area()
def area(self):
print(f"Вычисление площади для квадрата со стороной {self.side}")
return self.side * self.side
shape = Shape()
print(f"Площадь: {shape.area()}n") # Площадь: 0
square = Square(5)
print(f"Площадь: {square.area()}") # Площадь: 25
Расширение метода с помощью super()
Часто требуется не полностью заменить, а лишь дополнить логику родительского метода. Для этого используется super()
.
class Animal:
def make_sound(self):
print("Издает звук")
class Dog(Animal):
def make_sound(self):
super().make_sound() # 1. Вызываем реализацию из родительского класса
print("Гав!") # 2. Добавляем свою логику
dog = Dog()
dog.make_sound()
# Вывод:
# Издает звук
# Гав!