为什么可以将任何对象转换为任何接口?

wha*_*ong -1 java

class A {}
interface Wtf{}


A a = new A();
Wtf wtf = (Wtf)a;
Run Code Online (Sandbox Code Playgroud)

是什么原因,为什么编译得很好?也在C#:D

Jim*_* T. 6

那是因为a也可能是实现接口的A的子类的实例.所以编译器的行为是正确的.


vik*_*eve 6

运行它时会得到ClassCastException.

它在编译时没有给出错误的原因是A的子类可能实现Wtf,如下所示:

public class A {
    interface Wtf { }

    static class B extends A implements Wtf { }

    public static void main(String[] args) {
        A a = new B();
        Wtf wtf = (Wtf) a;
    }
}
Run Code Online (Sandbox Code Playgroud)