首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java编译器为啥会允许2个不相关的接口之间进行强制转换

2013-10-16 
Java编译器为什么会允许2个不相关的接口之间进行强制转换看看下面的代码,我成功的骗过了编译器,到运行时才

Java编译器为什么会允许2个不相关的接口之间进行强制转换
看看下面的代码,我成功的骗过了编译器,到运行时才出错:

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();
}


这种错误编译器应该是能检查出来的吧?
[解决办法]
这种编译器根本无法检查。



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

热点排行