繁体   English   中英

类型转换时的不一致(错误:不兼容的类型)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM