看看下面的代码,我成功的骗过了编译器,到运行时才出错:
class Demo {
public static void main(String[] args) {
Eatable e = new Apple();
Wearable w = (Wearable)e; w.wear();
}
}class Apple implements Eatable {
public void eat() {

}
}interface Eatable {
public void eat();
}interface Wearable {
public void wear();
}这种错误编译器应该是能检查出来的吧?

解决方案 »

  1.   

    这种编译器根本无法检查。你这里class Apple implements Eatable,Wearable
    如果Apple同时实现两个接口呢,就不会出现错误了,但是编译器是无法判断的,因为编译器并不知道你e这个引用在运行期指向的实际对象究竟是什么类型,只知道是一个实现了Eatable接口的对象。
    但是就算Apple同时实现了这两个接口,但是实际上这两个接口之间还是没有任何关系的。
      

  2.   

    你要知道java的异常机制就知道为什么了,一个是编译期,一个是运行期。