我不确定我是否理解下面第一行的代码?
interface Talkable{ }
class Device{}
class Phone extends Device implements Talkable{}
Talkable d = (Talkable) new Device(); //line 1
Talkable p = new Phone(); //line 2
我了解line2,因为Phone实现了Talkable,但是Device和Talkable无关,line1如何合法?
最佳答案
实际上,在Java中,将一个相关的类型强制转换为另一种是完全有效的(即使强制转换没有意义)。如果类型不兼容,则会在运行时出现错误。
例如 :
public static void main(String[] args) {
String s = (String) new Object();
System.out.println(s.intern());
}
编译正常,但在运行时提供
Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String at Sample.main(Sample.java:5)