Ошибка приведения типов на момент исполнения программы

Знаю, что приведение типов может выдавать ошибку не во время компиляции, а уже после компиляции во время исполнения программы. Почему так происходит? A a = (A) b;


Ответы (1 шт):

Автор решения: Кирилл Малышев

Компилятор не всегда может заранее узнать, какой класс приводится. Например:

public static void main (String[] args) throws java.lang.Exception
{
    A a = new B();
    C c = (C) a;
}


static class A{}
static class B extends A{}
static class C extends A{}

}

Данный код во время выполнения выкинет ClassCastException. Код скомпилируется, потому что в объект класса A может являться объектом одним из дочерних классов, но проверить, какой конкретно тип у объекта можно только во время выполнения.

Вот более явный пример:

public static void main (String[] args) throws java.lang.Exception
{
    Scanner sc = new Scanner(System.in);
    A a = sc.nextInt() == 1 ? new B() : new C();
    C c = (C) a;
}


static class A{}
static class B extends A{}
static class C extends A{}

Тут компилятор никак заранее не поймёт, можно ли привести тип.

→ Ссылка