在java中将类转换为接口

Shi*_*rty 1 java

为什么界面允许所有类?

例如,我有以下代码:

interface I1 { }
class C1 { }

public class Test{
     public static void main(String args[]){
        C1 o1 = new C1();
        I1 x = (I1)o1; //compiler compile its successfully but failed in run time
     }
}
Run Code Online (Sandbox Code Playgroud)

我知道为什么它在运行时失败,因为C1类没有实现I1接口.如果C1类实现I1,那么上面的代码将成功运行.

有人可以解释为什么界面允许所有类投射?

Hen*_*nry 5

可能有一个

class C2 extends C1 implements I1 { ... }
Run Code Online (Sandbox Code Playgroud)

可以分配此类的对象, o1并且在运行时也可以完全正确.