面向对象特性:多态 的理解

父类的一些成员,子类继承周去重写从而实现不同的功能。

import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    @abc.abstractmethod
    def talk(self):
        pass

class People(Animal): #动物的形态之一:人
    def talk(self):
        print('say hello')

class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('say wangwang')

class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('say aowu')

多态分为两种,编译时的多态和运行时的多态。
编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。 
重载指的是同一个累中有两个或者多个名字但是参数不同的方法。

重写有override修饰符和new 修饰符两种:
override是指“覆盖”,是指子类覆盖了父类的方法,子类的对象无法再访问父类中的该方法。
new是指“隐藏”,是指子类隐藏了父类的方法,通过一定的转换,可以在子类的对象中访问父类的方法。

动态绑定是多态的基础。
 

你可能感兴趣的:(面向对象特性:多态 的理解)