C ++与Java中的多重继承

时间:2011-10-18 17:20:09

标签: java c++ inheritance interface multiple-inheritance

当我遇到Java中没有包含多重继承的原因时,给出的理由是保持“简单性”和“减少复杂性”。 但是,如果使用来自C ++背景的Java环境,您是否认为支持多继承的接口概念使问题变得复杂而不是解决它?是否会导致推断:

  1. 我们不能在Java中使用多重继承,我们的代码架构应该相应地设计吗?
  2. 使用Interface的概念进行多重继承,与st
  3. 相比,我认为这对我来说是不太有利的(至少对我而言)

4 个答案:

答案 0 :(得分:3)

你应该阅读Bjarne Stroustrup关于多重继承的观点:

  

我们真的需要多重继承吗?

     

不是真的。我们可以不用   使用变通办法进行多重继承,就像我们能做的那样   没有使用变通办法的单一继承。我们甚至可以做到   没有使用变通办法的类。 C是该争用的证明。

     

但是,每种现代语言都有静态类型检查和   继承提供了某种形式的多重继承。在C ++中,   抽象类通常用作接口,而类可以有很多   接口。其他语言 - 通常被认为“不是MI” - 只是有一个   它们等同于纯抽象类的单独名称:   接口。语言提供继承的原因(单一和   多个)是语言支持的继承通常是优越的   解决方法(例如使用转发功能到子对象或   为了便于编程,用于检测   逻辑问题,可维护性以及性能。

引自 http://www2.research.att.com/~bs/bs_faq2.html#multiple

答案 1 :(得分:2)

多个实现继承和多个接口继承相同的野兽。

但是,如果它们要添加多个实现继承,那么它会使GC和其他语言实现复杂化。

答案 2 :(得分:0)

我认为Java(和许多其他OO语言)设计者的选择主要是由fragile base problem推动的。确实,我们不需要需要多重继承,但值得注意的是,我们不需要需要单一。面向对象的编程是关于实体的身份。在这方面,继承可被视为语法糖。

答案 3 :(得分:-1)

java中的接口概念是 NOT ,用于提供多重继承功能。