Предположим, мы хотим привести объект d к A,
A a = (C) d;
Итак, внутренне 3 правила были проверены компилятором и JVM.
Компилятор проверяет первые 2 правила во время компиляции, а JVM проверяет последнее правило во время выполнения.
Правило 1 (проверка времени компиляции):
Тип 'd' и C должны иметь некоторое отношение (дочерний к родительскому или родительскому.
к ребенку или в то же время). Если нет никаких отношений, то мы получим
ошибка компиляции (необратимые типы).
Правило 2 (проверка времени компиляции):
«C» должен быть того же типа или производного типа (подкласса) «A»
в противном случае мы получим ошибку компиляции (несовместимые типы).
Правило 3 (исключение времени выполнения):
Тип объекта времени выполнения 'd' должен быть таким же или быть производным от типа 'C'
в противном случае мы получим исключение времени выполнения (ClassCastException
Исключение).
Найдите следующие примеры, чтобы получить больше идей,
String s = new String("hello"); StringBuffer sb = (StringBuffer)s; // Compile error : Invertible types because there is no relationship between.
Object o = new String("hello"); StringBuffer sb = (String)o; // Compile error : Incompatible types because String is not child class of StringBuffer.
Object o = new String("hello"); StringBuffer sb = (StringBuffer)o; // Runtime Exception : ClassCastException because 'o' is string type and trying to cast into StingBuffer and there is no relationship between String and StringBuffer.