私は、このスレッドに、まだ述べられていないJava固有の回答を追加すると思いました。Javaでは、すべてのクラスは最終的にクラスから派生する必要がありますObject
。そのため、すべてのオブジェクトを問題なくのインスタンスにキャストできますObject
。この事実をサポートするために、Java継承チュートリアルには次のように記載されています。
スーパークラスを持たないObjectを除いて、すべてのクラスには1つだけの直接スーパークラス(単一継承)があります。他の明示的なスーパークラスがない場合、すべてのクラスは暗黙的にObjectのサブクラスになります。
クラスは、クラスから派生したクラスなどから派生したクラスから派生したり、最終的に最上位のクラスであるObjectから派生したりすることができます。このようなクラスは、オブジェクトに戻る継承チェーン内のすべてのクラスの子孫であると言われます。
循環継承の依存関係が許可されている場合、およびJavaのクラスには直接スーパークラスが1つだけ必要であるため(上記を参照)、循環依存チェーンのクラスのインスタンス(たとえば、クラス、、、A
およびB
)はC
から継承できません。Object
許可されていません。したがって、これらの循環依存オブジェクトはいずれもsとして扱うことができませんでしObject
た。したがって、コンパイラは循環依存を禁止する必要があります。