После приведения от a
к Dog
нет никакой разницы между d1
и d2
.Актерский состав потенциально проблематичен.Если a
на самом деле не Dog
, вы получите ClassCastException
во время выполнения.Поэтому вам лучше проверить тип среды выполнения с помощью instanceof
:
Animal a = new Dog();
Dog d1 = null;
if(a instanceof Dog)
{
d1 = (Dog)a;
}
Реальная проблема заключается в том, что если вам нужен Dog
, объявите переменную как Dog
, а не Animal
.Если вы работаете с любым типом Animal
, используйте базовый класс.
Тип переменной определяет только то, какой интерфейс вы хотите использовать - будь то интерфейс, предоставленный базовым классом,реализация некоторого класса или фактическая interface
.Тип переменной не определяет ее тип во время выполнения.