Предположим, мы хотим, чтобы бросить d объект A,
Аа = (C) D;
Так что внутренне 3 правила были проверены компилятором и JVM. Компилятор проверяет первые 2 правила во время компиляции, а JVM проверяет последнее правило во время выполнения.
Правило 1 (время компиляции проверки):
Тип «D» и С должны иметь какое-то отношение (ребенка к родителю или родителям к ребенку или одновременно) .Если нет отношения, то мы получим ошибку компиляции (неконвертируемые типы).
Правило 2 (Compile время проверки):
'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.
В какой ситуации вы на самом деле нужны явно привести объект к своему типу интерфейса? – harto
У вас здесь очень полезный ответ. Я бы хотел, чтобы вы его выбрали. – orbfish