为什么在下面的代码中没有出现编译错误?
看这两行:
BlackInk blackInk = new BlackInk();printable = (Printable)blackInk;
您 知道在第二行中,由于第一行,该值
blackInk仅引用类型的对象
BlackInk,而编译器则没有。对于所有的编译器知道(编译第二线时),它
可能 实际上已经:
BlackInk blackInk = new PrintableBlackInk();printable = (Printable)blackInk;
…哪里
PrintableBlackInk有扩展
BlackInk和实现的类
Printable。因此它是有效的(在编译时),以铸造从类型的表达式
BlackInk来
Printable。如果你做
BlackInk一个
final类,那么编译器知道有没有
办法 ,这将工作(除非值为null),并会在编译时失败,就像这样:
error: inconvertible types printable = (Printable)blackInk;^required: Printablefound: BlackInk
其详细信息在JLS
5.5.1中。
否则,我们 必须 等到执行时才能看到失败,因为强制转换在编译时有效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)