Ovviamente, questo si traduce in un errore di compilazione in quanto presidente non è legato alla Cat:Java: Casting una classe a un'interfaccia non correlato
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
}
}
Perché è allora, che io ho soltanto un'eccezione in fase di esecuzione in cui Ho lanciato un riferimento Cat all'interfaccia Mobile non collegata, mentre il compilatore può ovviamente dire che Cat non implementa Furniture?
interface Furniture {}
class Test {
public static void main(String[] args) {
Furniture f; Cat cat = new Cat();
f = (Furniture)cat; //runtime error
}
}
perché il polimorfismo si verifica in fase di esecuzione. –
ma il compilatore sa che Cat non implementa Furniture e che non può cambiare in fase di esecuzione? Potrei mancare un punto semplice, ma la tua risposta non mi aiuta veramente – enp4yne
Perché. Anche se Cat non è in grado di implementare direttamente i mobili, può far parte una superclasse di Cat. E il compilatore sceglie di non scavare in dettagli così brutti, dal momento che le regole per le interfacce sono piuttosto complicate. (Grazie, Sun.) E non esiste una regola generale * che richiede * al compilatore di rilevare un'eccezione di runtime inevitabile (come dividere per zero) - è più di un "servizio" che fornisce. –