Назад к вопросам
JuniorТеорияЧасто
Что произойдёт при компиляции и запуске программы?
public class Main {
public static void main(String[] args) {
Animal a = new Cat();
Dog d = (Dog) a;
d.bark();
}
}
class Animal {}
class Cat extends Animal {}
class Dog extends Animal {
void bark() { System.out.println("Woof"); }
}Исключение ClassCastException
- Ждать
Woof: приведение не превращает один объект в другой;(Dog) aтолько проверяет, что объект —Dog, аCatпроверку не проходит. - Ждать ошибку компиляции: компилятор видит только объявленный тип
Animal, а он может вести кDog, поэтому ошибка проявится только при запуске.
- Как проверить тип объекта перед приведением?
- Почему
(Dog) new Cat()не компилируется, а(Dog) aкомпилируется?