dynamic polymorphism
Някой може ли да ми разясни, ако имам абстрактен клас Animal с абстрактни методи, и съответно негов наследник Dog с имплементация на тези методи, при dynamic polymorphism, каква е разликата и защо трябва да предпочита едната декларация Animal dog = new Dog() или другата Dog dog = new Dog() , като съм наясно че при извикаване на методите в единия случай ще имаме runtime, а при другия compiletime , и съответно първият ще е по-бавен, а резултата е един и същ?
Animal[] animals = new Animal[2];
animals[0] = new Dog();
animals[1] = new Cat();
или
List<Animal> animals = new List<Animal>();
animals.Add(new Dog());
animals.Add(new Cat());
, а обект от тип Animal не мога да добавям защото е абстрактен клас.
На абстрактните класове не можеш да създаваш инстанция, за пример от живия живот - не съществува животното "животно", то може да бъде котка, куче (нещо конкретно).