zoukankan      html  css  js  c++  java
  • day21-5 类的多态与多态性

    类的多态与多态性

    多态

    多态指的是一类事物有多种形态,如动物有多种形态:人、狗、猪

    import abc
    
    
    class Animal(metaclass=abc.ABCMeta):  # 同一类事物:动物
        @abc.abstractmethod  #加上@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 aoao')
    

    多态性

    多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这儿表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数

    • 动物形态多态性的使用
    peo = People()
    dog = Dog()
    pig = Pig()
    
    # peo、dog、pig都是动物,只要是动物肯定有talk方法
    # 于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
    peo.talk()
    dog.talk()
    pig.talk()
    
    say hello
    say wangwang
    say aoao
    
    # 更进一步,我们可以定义一个统一的接口来使用
    def func(obj):  # obj这个参数没有类型限制,可以传入不同类型的值
        obj.talk()  # 调用的逻辑都一样,执行的结果不一样
    

    多态性的好处

    • 增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
    • 增加了程序的可扩展性:通过继承Animal类创建一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
    class Cat(Animal):  # 属于动物的另外一种形态:猫
        def talk(self):
            print('say miao')
    
    
    def func(animal):  # 对于使用者来说,自己的代码根本无需改动
        animal.talk()
    
    
    cat1 = Cat()  # 实例出一只猫
    func(cat1)  # 甚至连调用方式也无需改变,就能调用猫的talk功能
    
    say miao
    

    小结

    多态:同一种事物的多种形态

    多态性:一种调用方式,不同的执行效果

  • 相关阅读:
    每日日报110
    每日日报109
    每日日报108
    每日日报107
    每日日报106
    每日日报105
    每日日报104
    eclipse新建Maven Project项目后出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法
    0proxy/reflect
    toRefs/toRef/unref/customRef
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11053854.html
Copyright © 2011-2022 走看看