Несоответствия при приведении типов (ошибка: несовместимые типы) - PullRequest
1 голос
/ 05 мая 2020

Эта программа компилируется без каких-либо проблем.


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.

1 Ответ

7 голосов
/ 05 мая 2020

Экземпляры класса A никогда не будут также экземплярами X. Однако в первом примере возможно, что a1 является экземпляром некоторого гипотетического класса, который расширяет A и реализует X, поэтому приведение в порядке.

Во втором примере нет подклассов A, потому что он окончательный. Поскольку A не реализует X, никогда не будет экземпляра A, который также является экземпляром X. Таким образом, компилятор достаточно умен, чтобы понимать, что приведение типов всегда завершается ошибкой, и поэтому выдает сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...