Powiedzmy mamy kilka interfejsów test/zajęcia tak:Dlaczego ogólna metoda interfejsu może być zaimplementowana jako nieobsługiwana w Javie?
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);
}
Widać Animal.eat
to ogólna metoda z ograniczeniami. Teraz mam Human
klasę tak:
class Human implements Animal {
@Override
public void eat(Plant plant) {
}
}
który kompiluje grzywny. Widać, że Human.eat
jest mniej ograniczony niż Animal.eat
, ponieważ interfejs Eatable
został utracony.
Pytanie 1: Dlaczego kompilator nie skarży się na tę niespójność?
Q2: Jeśli Plant&Eatable
umniejsza do Plant
jest dopuszczalne dla kompilatora, dlaczego go narzeka na eat(Object plant)
?
Z której wersji Java korzystasz. Używanie środowiska Java 1.8 w środowisku Eclipse zapewnia oczekiwany czas kompilacji zgodnie z oczekiwaniami. – Codebender
@Codebender Java8 w Intellij IDEA. –
@Codebender Nie mam problemu z kompilacją tego. https://ideone.com/7xUcZn – flakes