我可能会失败,但我会为你解释一下。
老实说,我认为你在构思对象编程时可能犯了一个非常经典的错误——那就是区分对象和类。几乎任何面向对象语言中的对象创建都是基于类定义的构造之一。从您的问题来看,这听起来好像您在心理上建模一种 OO 语言,特别是对象继承作为聚合离散对象,实际上这些对象是根据聚合类定义定义的。
public class A
{
public A();
}
public class B:A
{
public B();
}
public class C:B
{
public C();
}
在您的 A->B->C 模型中,C 的定义是根据它自己的独特属性加上它的直系祖先 B 的所有成员,而 B 又是根据它自己的独特属性加上所有成员来定义的它的直接祖先 A. 创建对象的过程仍然是一个独特且离散的事件,并且该对象尽管具有多层遗产,但在实例化时仍然只是一个对象。
关于某些成员的可见性:当一个类作者设计和构建一个类时,他会从两个不同的角度对他提供的内容做出某些决定:向类的消费者公开的内容,以及对子类公开或可用的内容. 声明为私有的成员和字段都是后代类的一部分,即使它们“合同”禁止被子类访问。您可以粗略地类比,电视具有开/关按钮、音量控制和颜色控制的“公共”界面,但具有不针对消费者的“内部”控制,例如内部电子元件或电源供应。即使它们对消费者或子类不“可见”或“可用”,它们仍然非常存在。
现在,也就是说,大多数 OO 语言中的构造反映了您描述的属性 - 多个对象 - 并且涉及称为组合(或者,有时是Aggregation )的设计模式。这是一个类不是从祖先派生的地方类 - 通常是因为该类被声明为“密封”(C#)或“最终”(Java)(或其他禁止继承的名称)。这迫使有兴趣使用该类的开发人员使其成为另一个类的成员,例如当类的对象被实例化时,你确实有两个类的离散对象。
您可能有以下情况:
public final class InterestingThing
{
//definitions
public InterestingThing()
}
public final class MyThing
{
InterestingThing _interestingThing = new InterestingThing();
public MyThing()
}
这与您在原始问题中所描述的场景非常相似,其中 MyThing 的创建暗示了InterestingThing 的独特创建。请记住,这种结构通常也是由感兴趣的原始类的设计和定义所强制的。
归根结底,对象是由它们的类定义的,多重继承的类仍然只是一个类,但是在一个基于良好的增量对象设计的精致的、希望越来越健壮的层次结构中。
我希望,在某种程度上,这个解释有助于回答你的问题。