Biz alışkınız
class ClassTypeA implements InterfaceTypeA {}
class ClassTypeB extends ClassTypeA {}
ve bu kurallardan ufak bir sapma bizi çok şaşırtıyor.
Bağlanan türün sözdizimi şu şekilde tanımlanır:
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}
( JLS 12> 4.4. Tür Değişkenleri>TypeBound )
Değiştirecek olsaydık, kesinlikle implementsdavayı eklerdik
TypeBound:
extends TypeVariable
extends ClassType {AdditionalBound}
implements InterfaceType {AdditionalBound}
ve aynı şekilde işlenmiş iki cümle ile sonuçlanır
ClassOrInterfaceType:
ClassType
InterfaceType
( JLS 12> 4.3. Referans Tipleri ve Değerleri>ClassOrInterfaceType )
tek fark etmemiz gerekecek implements, ki bu da işleri daha da zorlaştıracak.
İnanıyorum ki bunun extends ClassOrInterfaceTypeyerine kullanılmasının ana nedeni extends ClassTypeve implements InterfaceType- karmaşık konsept içinde işleri basit tutmak. Sorun biz de kapsayacak şekilde doğru kelime yok olduğunu extendsve implementsve kesinlikle bir tane tanıtmak istemiyorum.
<T is ClassTypeA>
<T is InterfaceTypeA>
Her ne kadar extendsbir arayüz ile birlikte gittiğinde bazı karışıklık getirir, daha geniş bir terimdir ve her iki vakaları tanımlamak için kullanılabilir. Zihninizi bir tür genişletme kavramına ayarlamaya çalışın ( bir sınıfı genişletmemek , bir arabirim uygulamak değil ). Bir tür parametresini başka bir türle kısıtlarsınız ve bu türün gerçekte ne olduğu önemli değildir. Sadece onun üst sınırı ve onun süper tipi olduğu önemlidir .
implements?" - "Çünkü sadece varextends".