📜  继承和多态之间的区别 (1)

📅  最后修改于: 2023-12-03 15:11:41.759000             🧑  作者: Mango

继承和多态之间的区别

继承

继承是一种OOP(面向对象编程)的概念,它意味着创建一个类可以从另一个类继承功能。继承是一种代码重用的方式,它可以减少冗余代码的量。子类会继承父类的属性和方法,并且可以在其中添加自己的属性和方法。

组成部分
  • 父类/超类(base class/super class)
  • 子类/派生类(derived class/subclass)
代码片段
class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def eat(self):
        print(f"{self.name} is eating.")
        
class Cat(Animal):
    def __init__(self, name, age, color):
        super().__init__(name, age)
        self.color = color
        
    def meow(self):
        print(f"{self.name} is meowing.")

cat = Cat("Kitty", 2, "black")
cat.eat()
cat.meow()

在代码片段中,Cat类继承了Animal类,并且扩展了自己的颜色属性和meow()方法。

多态

多态是指同一个方法名可以有不同的实现方式。在OOP中,多态可以用来让不同的子类实现同一种方法,而每个子类的方法实现可能不同。多态的实现方式包括重载和重写。

重载

重载是在同一个类中定义多个方法,它们的名称相同而参数不同。这样当你使用这个方法时,编译器会根据你所使用的方法的参数来判断到底调用哪个方法。

重写

重写是指子类实现了一个方法,但是父类已经存在这个方法。在这种情况下,当你调用这个方法时,子类的方法将覆盖父类的实现。

代码片段
class Shape:
    def area(self):
        pass
        
class Square(Shape):
    def __init__(self, side):
        self.side = side
        
    def area(self):
        return self.side * self.side

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
        
    def area(self):
        return 3.14 * (self.radius ** 2)
        
square = Square(5)
circle = Circle(3)

shapes = [square, circle]
for shape in shapes:
    print(shape.area())

在代码片段中,Shape类中存在一个area()方法,但它并没有具体的实现。Square类和Circle类都继承了Shape类,并且实现了自己的area()方法。在循环中,我们可以看到square.area()circle.area()分别调用了子类的area()方法,这里就体现了多态的概念。