Я пытаюсь понять полиморфизм 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