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 implementskasus 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 ClassOrInterfaceTypedigunakan sebagai pengganti extends ClassTypedan implements InterfaceType- untuk menjaga hal-hal sederhana dalam konsep rumit. Masalahnya adalah kita tidak memiliki kata yang tepat untuk membahas keduanya extendsdan implementsdan kita pasti tidak ingin memperkenalkannya.
<T is ClassTypeA>
<T is InterfaceTypeA>
Meskipun extendsmembawa 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".