就我所知,多重继承会产生“金字塔”问题
       class A
         /             B                  C
          \       /
             D  
B、C 继承A,并且都覆盖了A中的某方法
D同时继承B、C ,而且没有覆盖该方法,那么当调用D的该方法时,究竟调用的是哪个超类的实现?天知道
我对这个话题其实知之不多,抛砖引玉吧

解决方案 »

  1.   

    应该是调用覆盖后的那个类的方法。除非用了this
      

  2.   

    那是Java的鼓吹者们骗你玩的。多继承本来是好事,只不过最初在Java里实现有些困难,所以Java早期的版本就放弃了类的多继承,改用interface来顶替。然后可能觉着把这事说出来有点丢脸,就告诉用户们多继承其实不好,用interface才合理呢。有机会你可以看看Eiffel对多继承的支持。C++的多继承最大的问题就是那个所谓的菱形继承问题,Eiffel用一个改名机制就把这个问题解决了。
      

  3.   

    用接口解决多继承问题(我想主要是多态吧?胡乱说),我看来就是与C++里的一样的。
    Java中,可以把所有继承同一接口的类当作该接口来调用,这个跟C++里所有类都可以用他们共同的父类引用的原理是一样的吧!
      

  4.   

    有一个OO设计的原则是LSP,李氏替换原则
    讲的是子类一定可以作为基类使用。如果使用了多重继承,有可能出现子类并不完全
    替换基类,而使用INTERFACE则可以较好地避免这个问题。
    有空可以看AGILE和JAVA与模式。
      

  5.   

    Schlemiel(维特根斯坦的扇子) ,我现在用的Python支持多重继承,可并不好用,因为要指定在是哪个父类的方法,太繁琐了,而且可能不可替代
      

  6.   

    to shuneng():>>如果使用了多重继承,有可能出现子类并不完全替换基类瞎说。比如说一个类C同时继承了类A和类B,你说C不能作为哪个类来使用?对于哪个类不符合LSP?
      

  7.   

    <<
    如果使用了多重继承,有可能出现子类并不完全替换基类
    >>
    这句话,确实未够看啊~~~