请输入您要查询的百科知识:

 

词条 多重继承
释义

§ 基本情况

多重继承可以导致某些令人混淆的情况,所以关于它的好处与风险之间孰轻孰重常常受人争论。Java使用了一个折衷的办法:Java允许一个类别继承自多于一个父接口(可以指定某一个类别,它继承了所有父类别的类型,并必须拥有所有父类别接口的外部可见方法的具体实现,并允许编译器强制以上要求),但只可以从一个父类别继承实现(方法与数据)。微软的.NET编程语言,例如C#和Visual Basic .NET也使用了这种接口的做法。

面向对象的程序设计中,继承描述了两种类型或两个类的物件,其中一种是另外一种的“子类型”或“子类别”。子类别继承了父类别的特征,允许分享功能。例如,可以创造一个“哺乳类动物” 类别,拥有进食、繁殖等的功能;然后定义一个子类型“猫”,它可以从父类别继承上述功能,不需重新编写程序,同时增加属于自己的新功能,例如“追赶老鼠”。

然而,如果想同时自多于一个结构继承,例如容许“猫”继承“哺乳类动物”之余,同时继承“卡通角色”和“宠物”,缺乏多重继承往往会导致十分笨拙的混合继承,或迫使同一个功能在多于一个地方被重写。(这带来了维护上的问题)

多年以来,多重继承都是一个敏感的话题,反对者指它增加了程序的复杂性与含糊性,例如在“钻石问题”中。

各种编程语言有不同的方式处理上述问题。例如Eiffel容许子类型透过重新命名,或提前为他们确定选择规则,来适应(adapt)它继承得来的功能。Java允许物件从多个接口继承,但仅允许一个实现继承。REALbasic与它相似,并增加了一个不需使用继承来“扩展”一个类别的功能。Perl使用一种有序列表式的继承机制:搜寻方法时,它会先搜寻当前类别的方法,然后使用深度优先搜索来顺序寻找各个继承类别及其父类别。CLOS允许程序设计者完全控制方法的组合。如果这还不足够,元对象协议给程序设计者一种手段去修改继承,方法调度,类别特例化,及其它内部的机制,而不影响系统的稳定性。

随便看

 

百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/19 5:00:43