Ошибка приведения типов на момент исполнения программы
Знаю, что приведение типов может выдавать ошибку не во время компиляции, а уже после компиляции во время исполнения программы. Почему так происходит?
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{}
Тут компилятор никак заранее не поймёт, можно ли привести тип.