Причина первая : Если в 2008 году я напишу код, который знает о классе Base
и будет делать с ним некоторые вещи, которые касаются только функций этого класса, апскейтинг позволяет создать класс Derived
в 2011 году и передать экземпляр в мой код без каких-либо изменений.
Возможно, это также может быть сделано (и, возможно, более эффективно), если бы я сначала написал свой код с использованием обобщений.
Причина вторая : если вам нужно хранить несколько экземпляров разных классов в одном контейнере, вам нужно выгрузить эти экземпляры в общий базовый класс.Рассмотрим, например, список «загружаемых в настоящее время» источников данных, которые могут быть локальными файлами, URL-адресами, данными в памяти и даже сокетами - все это будут конкретные классы, совместно использующие общий класс источника данных.