Я пытаюсь понять полиморфизм Java, и у меня есть один вопрос о downcasting объекте. Скажем, для этого примера у меня есть два подкласса 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