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

Java 类型转换时不一致(错误:不兼容的类型),java,class,methods,interface,compiler-errors,Java,Class,Methods,Interface,Compiler Errors,这个程序编译没有任何问题 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; //L

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


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
    }
}


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


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

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


在第二个示例中,没有
A
的子类,因为它是final。由于
A
不实现
X
,因此永远不会有
A
的实例也是
X
的实例。因此,编译器非常聪明,能够理解强制转换总是会失败,因此会给您一条错误消息。

请更改标题,并向我们提供有关您的程序的更多信息。此外,您还应该提供方法、类、变量和接口的实名,这样您就不会有单个字符。这对我们和您来说都是不必要的工作。您显示的错误是引用了一行您没有的代码。请更改标题并向我们提供有关您的程序的更多信息。您还应该提供方法、类、变量和接口的真实名称,这样您就没有单个字符了。这对我们和您来说都是不必要的工作。您显示的错误是引用了一行您没有的代码。。。
Error:
 error: incompatible types: A cannot be converted to X
 ob=(X) a1; //Illegal
            ^
1 error
Compilation failed.