zoukankan      html  css  js  c++  java
  • 多重继承的问题

      前面说了多重继承但是只是讲了他的提出和一些好处,其实还是有

    些问题的,多重继承增加了累的继承层次的复杂性,并且它的调试难度

    也增加了, 这些是很多人不愿意看到的事情。这样也就增加了开发的

    风险。所以能够想办法用单继承的来实现的东西最好避免使用多重继承。

      还有一种做法是使用混合类或者叫功能类,这个类中只放一些方法,

    来等待调用,这些方法都是共通的一些方法,而真正的数据都是存在于

    其他的类中。很多类都可以同他一起派生出新的类出来,但我们不必担

    心会有同名方法的存在,因为方法很多都是在这个功能类中。

      这里说到同名方法,解决同名方法的问题还可以利用虚继承的方法,

    如果有个Animal类,从他派生出来的Horse类和Bird类有一个共同的基

    类,从Horse和Bird多重继承而派生出来的Pegasus类在调用Animal中

    的一些方法的时候我们就需要采取一些方式,不然编译器不知道该通过

    Horse还是Bird去调用这个方法。就像一个人告诉你去找监护人的哥哥,

    这个时候你就迷惑了,是找爸爸的还是妈妈的哥哥?所以我们这个地方

    或者采用显示的限定:

        Horse::方法名; 来实现

    或者就利用这里说到的虚继承。就是让Horse和Bird有一个共同的基类

    而不是连个基类的拷贝!真很重要。如果是拷贝那么他们通过不同的父类

    调用的方法是不一样的。所以通过虚继承。我们让Pegasus在实例化的时

    候自己去实例化Animal的部分。那么编译器就知道该如何去调用Animal中

    的方法了。

       虚继承:

      class Horse : virtual public Animal .....

      class Bird : virtual public Animal...

      class Pegasus : public Horse, public Bird.....

    如此就完成了虚继承,在写Pegasus的构造函数的时候一定也要把Animal

    的部分声明好,这个时候就不是通过他们任何一个去继承下来的Animal了,

    而实际是自己进行构造的部分。在使用调用的时候就不用担心以上的问题了。

      

  • 相关阅读:
    Java基础总结--常用类以及包的访问权限
    Java基础总结--多线程总结2
    关于技术太多造成选择困难/浮躁的心情应对
    Java基础总结--多线程总结1
    研究生毕业目标以及具体路线
    Java基础总结--异常处理机制
    Java基础总结--面向对象2
    【Mac系统 + Python + Django】之开发一个发布会系统【Django视图(二)】
    【Mac系统 + Python + Django】之搭建第一个【Django Demo(一)】
    【Python + ATX】之uiautomator2 PageObject模式自动化框架学习
  • 原文地址:https://www.cnblogs.com/sunnystone85/p/1400082.html
Copyright © 2011-2022 走看看