美文网首页
类的多态

类的多态

作者: cloveses | 来源:发表于2018-08-25 16:40 被阅读0次

多态是面向对象的又一重要概念,字面意义就是“多种状态”。在程序中不需要区分引用对象,用相同的调用方法,完成引用对象的功能而表现出多种状态。有了多态,就不需要为每个具体的子类编写功能调用,是一种泛型编程。如果你是一个公司的后勤经理,需要打扫地面,不论是扫地机器人还是清洁工,你只要告诉他打扫的范围,他们就可以完成打扫的任务。
在一些语言中需要使用继承、接口、不同参数方法来实现多态。由于Python是动态语言,其实现的基本方式称为“鸭子类型”(duck typing)。即"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"在Python的调用语义中,只要调用对象具有所调用的属性,那么不管调用对象是什么类型,就可以调用成功。
在维基百科的词条(https://en.wikipedia.org/wiki/Duck_typing)中示例代码如下:

class Duck:
    def fly(self):
        print("Duck flying")

class Airplane:
    def fly(self):
        print("Airplane flying")

class Whale:
    def swim(self):
        print("Whale swimming")

def lift_off(entity):
    entity.fly()

duck = Duck()
airplane = Airplane()
whale = Whale()

lift_off(duck) # prints `Duck flying`
lift_off(airplane) # prints `Airplane flying`
lift_off(whale) # Throws the error `'Whale' object has no attribute 'fly'`

在函数lift_off()中对传入的entity调用了fly()方法,传入函数的是什么对象类型,只要entity引用的对象包括fly()方法,就可以成功调用,如lift_off(duck)、lift_off(airplane)。而第三次调用时,即lift_off(whale),传入的是Whale类的实例,其不具有fly()属性,因此调用就会失败。
正是因为Python的这种特性,降低了Python实现多态的难度,提高了多态实现的灵活性。所以在一些Python的面向对象程序资料中,对多态的介绍仅限于此。

相关文章

  • Java中的多态详解

    一、多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢...

  • 多态

    多态性(简化代码) - 多态的规则:里氏替换原则(子类替换父类方法:只是多态表现);多态的特性:父类保存了子类的对...

  • 多态

    一、多态 1、引用多态父类的引用指向本类的对象父类的引用指向子类的对象 继承是实现多态的基础 2、方法多态创建本类...

  • Java - Part 4

    一、多态 多态:是一个继承了父类的子类可以看作是它的父类。1、多态的条件 要有子父类关系 要有方法重写 要有父类引...

  • 类的多态

    多态是面向对象的又一重要概念,字面意义就是“多种状态”。在程序中不需要区分引用对象,用相同的调用方法,完成引用对象...

  • 类的多态

  • 10.26学习总结

    今天学习了多态和抽象类。 多态学了虚方法、方法的重写,多态和继承的区别,重写和隐藏的区别。 抽象类学了抽象类的方法...

  • Java 多态

    父类引用变量可以指向子类对象。 多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。 在使用多态后的...

  • 第二十九节:Java基础知识-类,多态,Object,数组和字符

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,O...

  • 多态

    1.多态 1.多态 1.1 要点 多态是方法的多态,不是属性的多态 多态的存在有三个必要条件:继承;方法重写;父类...

网友评论

      本文标题:类的多态

      本文链接:https://www.haomeiwen.com/subject/uuegiftx.html