ネットランダム改変

はてなダイアリーからはてなブログにインポート。

継承には2つの意味がある

継承には2種類ある。
仕様の継承
実装の継承
Javaでは、
classを使って「実装の継承」を単一に限定しながら、
interfaceを使って「仕様の継承」を多重にすることができる。
この方法では、多重継承の必要性を満たしながら,多重継承のデメリットを回避している。
データ構造の衝突
クラス階層の複雑化
しかし、interfaceでは「実装の継承」〔実装の共有〕ができないという問題がある(当たり前といえば当たり前)。
Rubyではモジュールを使ったMix-inでこの問題を解決している。Mix-inは次の条件がある。
通常の継承は単一継承に限る
2つめ以降の継承は,Mix-inと呼ばれる抽象クラスからに限定する
Mix-inクラスは次のような特徴をもつ抽象クラス。
単独でインスタンスを作らない
通常のクラスから継承しない
Mix-inを使うと、クラス階層は次のようになる。
クラス階層は単一継承となる
Mix-inはクラス階層木に「差し込む」ことで達成できる
これによって、多重継承の問題点を解決しながら、(classとは別に)実装の継承を実現している。

はてなツールバーで言及ができなかったのでこぴぺ。