Как понизить значение объекта Java?

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

19
задан Pontus Gagge 27 October 2010 в 12:29
поделиться