Method overriding

Method overriding allows a subclass to provide a different implementation of a method that is already defined in its parent class. By overriding a method, the subclass can modify or extend the behavior of the inherited method.

Let's take an example of a Shape class and a Rectangle subclass to understand how method overriding works:

class Shape:
    def area(self):
        pass


class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

In this code, we define a Shape class with an area method that is left undefined using the pass statement. We also define a Rectangle subclass that inherits from the Shape class.

In the Rectangle subclass, we override the area method by providing a specific implementation that calculates the area of a rectangle based on its width and height.

To use the overridden method, we can create an object of the Rectangle class and call the area method:

rectangle = Rectangle(5, 3)
print(rectangle.area())  # Output: 15

In this code, we create an object of the Rectangle class with a width of 5 and a height of 3. We then call the area method on the rectangle object, which invokes the overridden area method in the Rectangle class and calculates the area of the rectangle.

The output of the code will be:

15

In this example, the area method is overridden in the Rectangle subclass to provide a specific implementation that is different from the area method in the parent class (Shape).

Method overriding allows subclasses to customize the behavior of inherited methods to suit their specific needs. It provides a way to extend or modify the functionality of the parent class methods in the context of the subclass.