Mixinとは、オブジェクト指向の多重継承の欠点を最小にして利点を生かすテクニックです。
多重継承の欠点とは以下のようなものです。
- 構成が複雑になってしまう
- クラス群の優先順位が分からなくなる
- メソッドの名称が衝突してしまうことがある
これらの欠点を解決する方法として、下記のようなものがあります。
- 多重継承を禁止してしまう
- Mixinを使う
多重継承を禁止してしまう
この方法をとっているのはJavaです。
Javaでは、多重継承を行なえないようになっています。
代わりにインタフェースというものがあります。
継承には2種類の目的があります。
- 仕様の継承
- どのようなメソッドを持っているか、どのように振る舞うか
- 実装の継承
- どのようなデータ構造を使い、どのようなアルゴリズムで処理するか
仕様の継承は、インターフェースにあたります。
実装の継承は、「extends」での継承にあたります。
Javaでは、二種類の継承を分けて、仕様の継承のみ多重にできるようにしています。
このようにして、データ構造の衝突やクラス階層の複雑化などを回避しています。
しかし、インタフェースには、不満点があります。
それは、実装を共有できないことです。
継承の階層を超えて実装を共有したい場合に、不便さや実行効率の悪さがでてきてしまいます。