参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017497232674368
先看一段代码:
class Animal(object):
def run(self):
print('Animal is running...')
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
class Timer(object):
def run(self):
print('Start...')
def run_twice(animal):
animal.run()
animal.run()
run_twice(Animal()) ###1
run_twice(Cat()) ###2
run_twice(Timer()) ###3
多态:从###1和###2可以看出来,多态就是依赖Animal的对象作为参数的函数,可以输入Animal的子类的对象作为参数进行运行,而不需要修改函数中的代码。而Animal的子类中的方法run的实现细节可以千变万化,子类的实现可以千变万化这就是多态的功能。
多态的原因:子类的对象之所以可以作为参数输入到run_twice()中,是因为Animal中有的东西,子类Cat也有(子类继承父类的所有东西,并且部分可以进行重写)。而在python中函数run_twice的形参animal是不用说明数据类型的,所以任何有run方法的类的对象,都可以输入到run_twice中,如###3。Java中函数run_twice的形参animal是需要说明数据类型的,所以只能输入形参对应的类的对象或子类的对象。
Animal中的方法可以具体没有实现,只是return或print了适当的内容,具体的实现都留给了它的子类。



