私は失敗するかもしれませんが、私はあなたのためにこれについての説明を突き刺すつもりです。
正直なところ、オブジェクトプログラミングの考え方に非常に古典的な間違いを犯しているのではないかと思います。それが、オブジェクトとクラスを区別しているのです。事実上すべてのオブジェクト指向言語でのオブジェクト作成は、クラス定義に基づく構築の1つです。あなたの質問から、あなたは一般的にオブジェクト指向言語、特にオブジェクトの継承を集約された個別のオブジェクトとして精神的にモデル化しているように聞こえます。実際には、オブジェクトは集約されたクラス定義の観点から定義されています。
public class A
{
public A();
}
public class B:A
{
public B();
}
public class C:B
{
public C();
}
A-> B-> Cモデルでは、Cの定義は、独自のプロパティに加えて、その直接の祖先であるBのすべてのメンバーに基づいて定義されます。次に、Bは、独自のプロパティに加えて、すべてのメンバーに基づいて定義されます。オブジェクトを作成するプロセスは、依然として一意で個別のイベントであり、オブジェクトは、その多層的な遺産にもかかわらず、インスタンス化時に1つのオブジェクトにすぎません。
特定のメンバーの可視性について:クラスの作成者がクラスを設計および構築するとき、クラスの消費者に公開されるものと、サブクラスに公開または利用可能になるものの2つの異なる視点で利用できるようにするものについて特定の決定を行います。 。プライベートと宣言されたメンバーとフィールドは、サブクラスによるアクセスが「契約上」禁止されている場合でも、すべての子孫クラスの一部です。テレビにはオン/オフボタン、ボリュームコントロール、カラーコントロールの「パブリック」インターフェイスがありますが、内部電子部品や電源などの消費者向けではない「内部」コントロールがあるという大まかな例えをすることができます。供給。それらは、消費者やサブクラスに「表示」または「利用可能」ではありませんが、まだ非常に存在しています。
とはいえ、ほとんどのオブジェクト指向言語には、記述したプロパティ(複数のオブジェクト)を反映し、 Composition(または場合によってはAggregation )と呼ばれるデザインパターンを含む構造があります。これは、クラスが祖先から派生していない場合です。 class-通常、クラスが「sealed」(C#)または「final」(Java)(または継承を禁止するその他の指定)として宣言されているためです。これにより、クラスの使用に関心のある開発者は、クラスを別のクラスのメンバーにする必要があります。クラスのオブジェクトがインスタンス化されると、両方のクラスの個別のオブジェクトがあります。
あなたは以下を持っているかもしれません:
public final class InterestingThing
{
//definitions
public InterestingThing()
}
public final class MyThing
{
InterestingThing _interestingThing = new InterestingThing();
public MyThing()
}
これは、元の質問で説明した種類のシナリオであり、MyThingの作成は、InterestingThingの明確な作成を意味します。また、この構造は通常、対象となる元のクラスの設計と定義によって強制されることにも注意してください。
最終的に、オブジェクトはクラスによって定義され、多重継承されたクラスは依然として単なるクラスですが、優れたインクリメンタルオブジェクト設計に基づいた、洗練された、できればますます堅牢な階層になっています。
何らかの形で、この説明があなたの質問に答えるのに役立つことを願っています。