クラスと型

ついでに思ったがjavaで既に実装された抽象クラスに対してインターフェースだけ借りたいときがある。一つの抽象クラスからインターフェースを借りるには(実装が汚いのを我慢しつつ)継承すれば良いが、二つの抽象クラスからインターフェースを借りるのは無理だ。その抽象クラスの方を改造出来れば良いが、ライブラリを使う場合など、非常に難しいこともある。

class ConcreteClass implements AbstractClass {
}

としてクラスのインターフェースだけを借りることが出来たら良いのだけども。
javaの言語仕様としては、クラスを記述するとそのクラスの実装が定義されるとともにそのクラスに対する型が定義される、インターフェースを記述するとそのインターフェースに対する型が定義される、というようになっている。インターフェースと違ってクラスは実装と型を同時に定義してしまう故の弊害かもしれない。
この辺り、完全に実装と型を分離した言語があっても良いかもしれない。ちょっと面倒かもしれないが。

      • -

>実装と型を分離
型推論の付いているOCamlはこんな感じかも。あまり詳しくないので何だが。