【问题标题】:Inconsistencies while typecasting (Error: Incompatible types)类型转换时的不一致(错误:不兼容的类型)
【发布时间】:2020-08-20 04:18:13
【问题描述】:

这个程序编译没有任何问题。


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.

【问题讨论】:

  • 请更改标题并向我们提供有关您的计划的更多信息
  • 另外你应该给方法、类、变量和接口真正的名字,所以你没有单个字符。它只会为我们和您带来不必要的工作
  • 您显示的错误是引用了您没有的代码行...

标签: java class methods interface compiler-errors


【解决方案1】:

A 类的实例永远不会是X 的实例。但是,在第一个示例中,a1 可能是某个假设类的实例,该类扩展了A 并实现了X,因此强制转换没问题。

在第二个示例中,没有A 的子类,因为它是最终的。由于A 没有实现X,所以永远不会有A 的实例也是X 的实例。因此,编译器足够聪明,可以理解强制转换总是会失败,因此会给出错误消息。

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2017-10-03
    • 2013-10-14
    • 2012-10-19
    相关资源
    最近更新 更多