接口是否继承自ObjectJava中的类?
如果没有那么我们如何能够在接口实例上调用对象类的方法
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
Run Code Online (Sandbox Code Playgroud) interface I{}
class A implements I{}
class B{}
Run Code Online (Sandbox Code Playgroud)
第一:
I[] arr = new A[10];
arr[0] = (I) new B(); // will produce ClassCastException at runtime
Run Code Online (Sandbox Code Playgroud)
第二:其中如果我使用具体的课程
I[] arr = new A[10];
arr[0] = (A) new B(); // will produce compile-time error
Run Code Online (Sandbox Code Playgroud)
如果在我的第一个例子中,(I) new B()java编译器也应该产生编译错误,那有什么区别?
是不是java编译器应该能够区分它也是一个"不可转换的类型"?特别是当新的操作员马上到来时?
是否有任何实例/机会可能创建B的新实例可以生成类型I的可转换类型?
我知道在某些时候,Java编译器不应该立即说它是编译器错误,就像你这样做:
I i = (I) getContent(); // wherein getContent() will return a type of Object
Run Code Online (Sandbox Code Playgroud)
编辑:
让我澄清一下这个问题为什么它不可能重复:将已知类型的引用转换为类型层次结构之外的接口
这个问题的目的不是因为我不知道会有什么结果或什么是错的东西等等.
我只是想知道"技术方面更详细的解释",为什么JVM会采用这种方式行事,或者为什么Java想出了那种不使这种情况成为编译时错误的决定.
众所周知,在编译时而不是在运行时找到"有问题的代码"总是更好.
另一件事,我正在寻找的答案是在这个线程上找到的而不是那些"重复?".