en böyle bir kaç deneme arabirimleri/sınıfları var diyelim:Java'da jenerik olmayan bir arayüzün genel yöntemi neden uygulanabilir?
abstract class Plant {
public abstract String getName();
}
interface Eatable { }
class Apple extends Plant implements Eatable {
@Override
public String getName() {
return "Apple";
}
}
class Rose extends Plant {
@Override
public String getName() {
return "Rose";
}
}
interface Animal {
<T extends Plant & Eatable> void eat(T plant);
}
Sen Animal.eat
kısıtlamaları ile genel bir yöntemdir görebilirsiniz. İyi derler
class Human implements Animal {
@Override
public void eat(Plant plant) {
}
}
: Artık böyle benim Human
sınıf var. Human.eat
'un Animal.eat
'dan daha az kısıtlı olduğunu görebilirsiniz, çünkü Eatable
arabirimi kaybolur.
S1: Derleyici neden bu tutarsızlıktan şikayet etmiyor?
S2: Plant
için Plant&Eatable
notunu düşürdü derleyici için kabul edilebilir ise, eat(Object plant)
üzerine şikayet neden?
Hangi Java sürümünü kullanıyorsunuz. Eclipse içinde Java 1.8 kullanılması beklendiği gibi derleme zamanı hatası verir. Intellij IDEA'da – Codebender
@Codebender Java8. –
@Codebender Bunu derlemekle ilgili bir sorunum yok. https://ideone.com/7xUcZn – flakes