“独占”继承:对某些形式的多重继承的要求
Posted
技术标签:
【中文标题】“独占”继承:对某些形式的多重继承的要求【英文标题】:"Exclusive" inheritance: requirement for certain forms of multiple inheritance 【发布时间】:2015-11-24 04:34:39 【问题描述】:在 C++ 或 Java(或任何其他流行语言)中有没有办法限制哪些类可以扩展/继承给定的类?具体来说,是否可以在扩展某个类时强制执行特定的多重继承模式?
我将这篇文章命名为“独占继承”,因为这将构成一种继承形式,其中某些类将拥有扩展潜在超类的独占“特权”。
假设我们已经定义了以下类(为了简单起见,我将使用 extends
关键字,不受语言限制):
Visualizable
Timeable
Maskable
ExperimentalData
Trial extends ExperimentalData
TimeStampedData extends Timeable
PositionData extends Visualizable
两种情况:
我们想定义一个新的类ShortPass
,它继承自类Maskable
,但我们希望以下是扩展Maskable
的无效方式:
ShortPass extends PositionData, Maskable
应该使用以下内容
ShortPass extends PositionData, Timeable, Maskable
我们希望 Timeable
或 Visualizable
的任何类都能够扩展 Maskable
而不是其他任何东西,以便以下内容有效:
ShortPass extends PositionData, Maskable
或
ShortPass extends TimeStampedData, Maskable
但从来没有
Trial extends Maskable
ShortPass extends Visualizable, Timeable, Maskable
我知道解决方案 1 的一种方法是通过从 Timeable
和 Visualizable
继承来定义 Maskable
,但是如果方案 2 是这种情况(例如,程序规范需要一个类,比如 ShortPass
, 要么是Visualizable
要么是Timeable
而不是两者(比如说,因为将ShortPass
定义为Visualizable
和Timeable
没有意义))?
【问题讨论】:
你为什么要这样做 【参考方案1】:我可以想到两种方法:
我对此的第一个想法是将类声明为final
,因此它根本不能用作超类。我想你已经知道了,所以继续我的第二个想法,
这仅适用于interfaces
,但是实现另一个接口的接口可以工作(如果您希望接口 A 仅与另一个接口 B 一起实现)。然而,这引入了独立实现接口 B 的可能性。 (虽然你已经注意到了,只是说这确实是一个好方法)
【讨论】:
以上是关于“独占”继承:对某些形式的多重继承的要求的主要内容,如果未能解决你的问题,请参考以下文章