【第 11 天】继承 与 多态

继承 与 多态

继承

  • 子类继承父类,子类的实例即是子类的类型也是父类的类型。判断是否为某个类型(的实例)可以用函数 isinstance(dog, Dog)
  • 由以上的特性,在定义某些方法时,可以定义传入的类型为父类,则也可以传入不同的子类,且子类可以重写父类的方法从而显示多态性。

多态

  • 多态的好处在于:我们需要传入多个子类,但是我们定义的接收类型只需要是一个父类,因为子类都是父类的类型。然后,我们只要按照对父类的操作即可,如果子类重写了父类的方法,那么实际执行会自动调用子类的方法。
  • 即 对于一个实例,我们只需要知道它类型的父类,不需要知道其确切的子类型,就可以调用原本父类的方法,如果子类重写了这个方法,则会自动执行子类里的。
  • 即 “开闭”原则
    • 对扩展开放: 允许新增子类和重写父类的方法(允许新增Animal子类)
    • 对修改封闭:不需要修改依赖父类类型的相关函数(不需要修改依赖Animal类型的run_twice()等函数)

静态语言 VS 动态语言

  • Python这种动态语言不要求严格的继承体系,feel-like object 鸭子类型。
    不要求传入的一定是 Dog 类型,只要保证传入的对象像Dog类一样,有一个 run() 方法就可以
  • 对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
  • 具体参见代码
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Sub...
    chen_000阅读 1,657评论 1 1
  • 1.面向对象三大特性 -封装性 -继承性 -多态性 2.什么是封装 封装性就是隐藏实现细节,仅对外公开接口。 3....
    梦夜繁星阅读 4,744评论 0 6
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,891评论 2 9
  • 我已垂垂老矣,在这世上苛活了88载了。有人叫我“老不死的”,有人喊我“老家伙”。要换作以前,我必是要恼怒的。但是,...
    秋日丝语阅读 4,463评论 17 12
  • 首先, 应用添加内置更新已经没什么可写的了, 之前的方法在以前审核时被拒绝, 原因就是不支持这种更新方式, 后续就...
    190CM阅读 8,722评论 0 2