继承与多态
Posted lz1008
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承与多态相关的知识,希望对你有一定的参考价值。
我们可以从某个现有的class继承定义一个class,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)如:class Dog(Animal): 而不是class Dog(object): 好处:1.子类能获得父类的全部功能,包括父类的方法 2.多态:子类的实例既是属于子类,也属于父类。
注意:子类会继承父类的方法,但当子类有同样的方法,如run(),子类会覆盖父类,运行时会调用子类的run()
多态好处:只要确认是某类型,就可以调用该类型的方法,如果子类实例有同名方法,则调用子类方法,否则调用父类方法,这样不必再为子类单独建立一个函数调用方法 如: def run_twice(animal): animal.run() 子类Dog不需要再建立一个函数调用Dog.run,而直接使用run_twice(Dog)就行,而且其实是使用子类方法Dog.run。在调用时也不需要管内部细节,直接调用,运行时会自动根据该对象的确切类型(是否子类,子类是否有同样方法)决定。 同时,继承和多态还可以一级一级继承下去
静态语言 vs 动态语言 对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法
对于动态语言Python来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了
简单来说就是,动态语言不一定需要传入Animal类型,而只需要该类型定义了run()的方法就可以调用run_twice()。静态语音如Java则不行,必须传入Animal类型的
以上是关于继承与多态的主要内容,如果未能解决你的问题,请参考以下文章