に慣れている
class ClassTypeA implements InterfaceTypeA {}
class ClassTypeB extends ClassTypeA {}
そして、これらの規則から少しでも逸脱すると、私たちを非常に混乱させます。
型バインドの構文は次のように定義されます
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}
(JLS 12> 4.4。タイプ変数>TypeBound
)
変更したimplements
場合は必ずケースを追加します
TypeBound:
extends TypeVariable
extends ClassType {AdditionalBound}
implements InterfaceType {AdditionalBound}
同じように処理される2つの句で終わる
ClassOrInterfaceType:
ClassType
InterfaceType
(JLS 12> 4.3。参照タイプと値>ClassOrInterfaceType
)
ただし、を処理する必要があるためimplements
、事態はさらに複雑になります。
それextends ClassOrInterfaceType
がextends ClassType
andの代わりに使用される主な理由だと思いますimplements InterfaceType
-複雑な概念の中で物事をシンプルに保つために。問題は、両方をカバーする適切な言葉がないことです。extends
またimplements
、どちらかを紹介したくありません。
<T is ClassTypeA>
<T is InterfaceTypeA>
けれどもextends
、それはインターフェースと一緒になったときに、いくつかの混乱をもたらし、それはより広範な用語だと両方のケースを記述するために使用することができます。型の拡張(クラスの拡張ではなく、インターフェースの実装ではない)の概念に心を向けましょう。型パラメーターを別の型で制限し、その型が実際に何であるかは関係ありません。それがその上限であり、それがそのスーパータイプであることだけが重要です。
implements
?」-「あるだけだからextends
」。