Я пытаюсь понять полиморфизм Java, и у меня есть один вопрос о понижении значения объекта. Скажем, для этого примера у меня есть два подкласса Dog и Cat, которые наследуются от суперкласса Animal
Насколько я понял, единственный способ понизить значение объекта - это если этот объект уже хорошего типа, например:
Animal a = new Dog();
Dog d = (Dog) a;
Это работает правильно?
Но что, если я хочу создать обычное животное, не зная, каким оно будет, а затем применить его, когда я знаю, как я могу это сделать?
Animal a = new Animal();
Dog d = (Dog) a;
Это вызовет исключение ClassCastException во время выполнения, верно?
Я нашел единственный способ сделать это - создать новый конструктор Dog, который создает собаку из обычного животного:
Animal a = new Animal();
Dog d = new Dog(a);
с
public Class Dog extends Animal{
public Dog(Animal a){
super(a);
}
}
Итак, мой вопрос: как я должен это сделать?
Спасибо много! nbarraille