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 implements
davayı 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 ClassOrInterfaceType
yerine kullanılmasının ana nedeni extends ClassType
ve implements InterfaceType
- karmaşık konsept içinde işleri basit tutmak. Sorun biz de kapsayacak şekilde doğru kelime yok olduğunu extends
ve implements
ve kesinlikle bir tane tanıtmak istemiyorum.
<T is ClassTypeA>
<T is InterfaceTypeA>
Her ne kadar extends
bir 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
".