interface Printable {} class BlackInk {}
public class Main { public static void main(String args[]) { Printable printable = null; BlackInk blackInk = new BlackInk(); printable = (Printable)blackInk; } }
如果前面的代码已编译并运行,则结果为ClassCastException printable = (Printable)blackInk;。但是,如果将Printable更改为一个类,则因为blackInk无法转换为Printable而无法编译。当Printable是接口时,为什么要编译?
printable = (Printable)blackInk;
编译器不知道这是行不通的:您可能具有实现Printable的BlackInk子类。那演员就好了。
在编译器知道它不起作用的情况下,您会得到一个错误。
例如,如果您制作BlackInk final(这样就不能有子类),则会出现错误。
final