我不确定我是否理解下面第一行的代码?

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)

07-25 22:51