Kita terbiasa
class ClassTypeA implements InterfaceTypeA {}
class ClassTypeB extends ClassTypeA {}
dan sedikit penyimpangan dari aturan ini sangat membingungkan kami.
Sintaks tipe terikat didefinisikan sebagai
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}
( JLS 12> 4.4. Jenis Variabel>TypeBound
)
Jika kami mengubahnya, kami pasti akan menambahkan implements
kasus ini
TypeBound:
extends TypeVariable
extends ClassType {AdditionalBound}
implements InterfaceType {AdditionalBound}
dan berakhir dengan dua klausa yang diproses secara identik
ClassOrInterfaceType:
ClassType
InterfaceType
( JLS 12> 4.3. Jenis dan Nilai Referensi>ClassOrInterfaceType
)
kecuali kita juga perlu diurus implements
, yang akan memperumit masalah.
Saya percaya itu adalah alasan utama mengapa extends ClassOrInterfaceType
digunakan sebagai pengganti extends ClassType
dan implements InterfaceType
- untuk menjaga hal-hal sederhana dalam konsep rumit. Masalahnya adalah kita tidak memiliki kata yang tepat untuk membahas keduanya extends
dan implements
dan kita pasti tidak ingin memperkenalkannya.
<T is ClassTypeA>
<T is InterfaceTypeA>
Meskipun extends
membawa beberapa kekacauan ketika berjalan seiring dengan antarmuka, itu adalah istilah yang lebih luas dan dapat digunakan untuk menggambarkan kedua kasus. Cobalah untuk menyesuaikan pikiran Anda dengan konsep memperluas jenis (tidak memperluas kelas , tidak mengimplementasikan antarmuka ). Anda membatasi parameter tipe oleh tipe lain dan tidak masalah apa tipe itu sebenarnya. Yang penting hanyalah batas atasnya dan supertipe .
implements
?" - "Karena hanya adaextends
".