[英]Inconsistencies while typecasting (Error: Incompatible types)
该程序编译没有任何问题。
interface X{}
class A{
public void mA(){
System.out.println("mA of A");
}
}
class Demo{
public static void main(String args[]){
X ob=null;
A a1=null;
ob=(X) a1; //Legal
a1=(A)ob; //Legal
}
}
但是下面的代码有问题吗?
interface X{}
final class A{
public void mA(){
System.out.println("mA of A");
}
}
class Demo{
public static void main(String args[]){
X ob=null;
A a1=null;
ob=(X) a1; //Illegal
a1=(A)ob; //Illegal
}
}
Error:
error: incompatible types: A cannot be converted to X
ob=(X) a1; //Illegal
^
1 error
Compilation failed.
class A
实例永远不会也是X
的实例。 但是,在第一个示例中, a1
可能是一些假设的 class 的实例,它扩展A
并实现了X
,因此强制转换很好。
在第二个示例中,没有A
的子类,因为它是最终的。 由于A
没有实现X
,因此永远不会有A
的实例也是X
的实例。 因此,编译器足够聪明,可以理解强制转换总是会失败,因此会给出错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.