列挙型が継承できない理由クラスは、メソッドの使い方を約束(契約)するものです:
上のコードは型安全といえます。なぜなら、 B は A との契約を守っており、かつ共変性/反変性のマジックによって、 メソッドへのあらゆる期待が満たされるからです。例外は別です。 一方で、列挙型は case について契約するものです。メソッドではありません:
ここで以下のように、列挙型が継承可能だとしましょう:
通常の継承のルールでは、あるクラスの子クラスは親クラスの型チェックを通過します。
上のコードの問題点は、
こうした理由から、列挙型は final 扱いであり、継承できなくなっています。 |