Oczywiście skutkuje to błąd kompilacji, ponieważ przewodniczący nie jest związana z cat:Java: Casting klasę niepowiązanych interfejsu
class Chair {}
class Cat {}
class Test {
public static void main(String[] args) {
Chair chair = new Char(); Cat cat = new Cat();
chair = (Chair)cat; //compile error
}
}
Dlaczego go wtedy, że mogę jedynie wyjątek w czasie wykonywania, gdy Rzucam odnośnik Cat do niepowiązanego ze sobą interfejsu mebli, podczas gdy kompilator może oczywiście powiedzieć, że Cat nie implementuje mebli?
interface Furniture {}
class Test {
public static void main(String[] args) {
Furniture f; Cat cat = new Cat();
f = (Furniture)cat; //runtime error
}
}
ponieważ polimorfizm występuje w czasie wykonywania. –
, ale kompilator wie, że Cat nie implementuje mebli i nie może się zmienić w czasie wykonywania? Być może brakuje mi prostego punktu, ale twoja odpowiedź tak naprawdę nie pomaga – enp4yne
Ponieważ. Mimo że Cat nie może bezpośrednio implementować Meble, może to być nadklasa kota. Kompilator decyduje się nie zagłębiać w tak brzydkie szczegóły, ponieważ zasady dotyczące interfejsów są dość zawiłe. (Dziękuję, Sun.) I nie ma ogólnej zasady * wymagającej * kompilatora do wykrycia nieuniknionego wyjątku środowiska wykonawczego (takiego jak dzielenie przez zero) - jest to raczej "usługa", którą zapewnia. –