classHoge(Foo) { // ...}
なんてことは論理的にあり得ない。
HogeをFooとみなすかどうかは、一般的に文脈によるからだ。
だから、Hogeの定義にFooのサブタイプであることが課せられるのはおかしい。
ましてや、Fooの実装がinheritされるのは尚更おかしい。
例をあげよう。
しかし、カーテンを家具の一種だとみなすか、布製品の一種だとみなすかは、文脈による。
だから、カーテンの定義にそれが家具であるとか布製品であるとかいう条件が課されるのはおかしい。
また、インタフェースの実装もおかしい。(たとえそれがクラス定義とインタフェース実装が分離された場合、いわゆるProtocolというパターン、であっても)
AがBであるとき、AをBとみなす方法は一般的には複数あり、どの方法によるかは文脈によるからだ。
たとえば、裏返して着られるパーカーのクラスにWearableインタフェースを実装しようとしたら、どちら向きをwear()メソッドに実装するか定まらない。
関数型言語ならオブジェクトまたはメソッドをクロージャで包むことで動的に派生型を作れるし複数パターン作れる
関数型言語ならオブジェクトまたはメソッドをクロージャで包むことで動的に派生型を作れるし複数パターン作れる
木構造にイテレータを実装するのだってDFSとBFSがあるしな