为什么下面的代码我没有得到编译错误?我收到了一个ClassCastException
,这有点令人困惑。这是因为它们相关吗?
class Ink {}
Interface Printable {}
class ColorInk extends Ink implements Printable {}
class BlackInk extends Ink {}
class TwistInTaleCasting {
public static void main(String args[]) {
Printable printable = null;
BlackInk blackInk = new BlackInk();
printable = (Printable)blackInk;
}
}
BlackInk
和Ink
都不是可打印的(Printable)
,那么编译器为什么会通过这个转换呢?(或者更确切地说,为什么需要这个转换呢?) - PphoenixblackInk
的值可能是对实现了Printable
接口并继承了BlackInk
类的类实例的引用。它编译通过的原因与Object o = new Object(); String x = (String) o;
编译通过的原因相同… - Jon Skeet