2

到目前为止,在我阅读的文章中,提到实现多重继承会增加复杂性。但我想知道它是否会增加消费者开发者方面或语言开发者方面的复杂性?

可以说,我们可以做这样的事情来克服歧义:

class Artist{
   public void Draw(){ }
}

class Cowboy {
   public void Draw() { }
}

class Person : Artist, Cowboy{

}

在这里,我们似乎有两个相同的签名方法,但是诸如this.base.Artist.Draw()orthis.base.Cowboy.Draw()和类型之外的语法,从它的实例person.base.Cowboy.Draw()看来足以解决这种歧义。

那么我们在这里谈论的模糊性和复杂性是什么。那里有很多产品,但从消费者的角度来看,我们要处理的不会那么复杂。

base在许多情况下,关键字可以防止歧义:

  1. person.base.Cowbow.Draw();
  2. (new Person()).base.Cowboy.Draw();
  3. ((Person) someInstance).base.Cowboy.Draw();
  4. this.base.Cowboy.Draw();
  5. 等等
4

1 回答 1

0

如果对基类成员的每次访问都必须预先添加适当的基类名称,那么从基类继承有什么意义呢?可以说,它基本上与只制作 Person 类的基类属性相同。

要考虑的另一件事是使用多重继承时虚拟表的复杂性。以 c++ 为例,多重继承增加了虚拟表的大小和复杂性,从而降低了查找性能。

最近我接手了一个项目,该项目有 2 个具有多重继承的不同类(一个从 8 个类继承,另一个从 6 个类继承)。只需将类重构为使用“HAS-A”关系而不是“IS-A”关系,我就实现了 5% 的性能提升。当然这是一个极端的例子,但它可以证明多重继承可能产生的影响。

于 2012-04-29T10:16:40.807 回答