在了解多继承之前,首先了解一下什么叫做继承。
继承可以说是面对对象时软件技术当中的一种概念,与多态、封装工为面向对象的三个基本特性。
知道了继承那么就要知道继承是用来干什么的???
继承可以使得子类拥有其父类的属性以及方法,甚至还可以重新的定义或者追加属性和方法。
那什么叫做追加和重新定义父类方法?
简单来说就是,当子类继承父类之后父类的所有的方法子类可以调用,如觉得这个方法在子类中引用觉得不是自己想要的结果可以实现重写一个方法或者追加一个新的方法方便得到自己想要的结果。
那知道了那么多,今天就来聊一聊什么叫做多继承。
多继承,顾名思义就是有子类继承多个父类这个是属于多继承
言归正传,知道了继承多继承那么肯定是有一些的区别,单继承和多继承的区别就在于单继承继承于一个父类多继承是继承多个父类,但是都能够实现重写方法以及追加方法
如图所示,在我们继承于 Language(语言)的类中,Python,Java是属于单继承的而C语言是属于多继承的,因为C语言继承了Python、Java和Language 三个父类;
如图:
此时每个子类都追加了一个新的方法各式各样的如果当我们调用多继承时候会发生样子的呢?
如图:
当我们以此调用多继承的类的时候可以调用其他父类中的方法,按照从上往下执行的顺序可以看出先是执行的Python,然后是Java,最后是C,那么如果当我们输出一个他们共有的方法的时候结果又是怎么样子的呢?
如图:
从运行的结果可以看出,程序仅仅只是输出了一个C里面的方法say,那这又是为什么呢?
当我们子类在调用父类的时候重写了他里面的方法那说明什么?,这个父类的方法已经被我们重写了一遍,调用的时候也应该知道,此时只会执行子类中的方法而不会去父类寻找这个方法,父类子类中的方法互不影响
那么问题再一次得到升华,当多继承的子类中没有父类的方法,但是各个父类中各有一个一摸一样的方法这个时候会调用谁的方法呢?
如图:
当我们在调用do这个方法的时候多继承的子类是没有这个方法的但是他执行了Python父类中的do方法,这是因为啊,在我们继承的过程中Python父类写到了()中的最前面,查找的顺序也就是Python,Java,其次是Language,如果当第一个Python中没有这个方法那么就会在第二个父类中查找此方法以此类推;
总结:在我们使用Python多继承的时候,首先就是要知道继承的顺序是从最左边到最右边开始的,其次如果当子类中重写或者追加方法的时候只会调用自己的方法不会调用别的方法;