Когда использовать абстрактные классы?

Вот статья MSDN об абстрактных классах, но я действительно не получаю ее...

Когда я должен действительно использовать абстрактные классы? Каковы преимущества использования абстрактных классов?

77
задан Patrick Hofman 8 July 2014 в 09:06
поделиться

4 ответа

Абстрактные классы полезны, когда вам нужен класс для целей наследования и полиморфизма, но нет смысла создавать экземпляр самого класса, только его подклассы. Они обычно используются, когда вы хотите определить шаблон для группы подклассов, которые имеют общий код реализации, но вы также хотите гарантировать, что объекты суперкласса не могут быть созданы.

Например, предположим, что вам нужно создать объекты «Собака», «Кошка», «Хомяк» и «Рыба». Они обладают схожими свойствами, такими как цвет, размер и количество ног, а также поведение, поэтому вы создаете суперкласс Animal. Однако какого цвета животное? Сколько ног у объекта Animal? В этом случае нет особого смысла создавать экземпляр объекта типа Animal, а только его подклассы.

Абстрактные классы также имеют дополнительное преимущество в виде полиморфизма, позволяя вам использовать тип (абстрактного) суперкласса в качестве аргумента метода или типа возвращаемого значения. Если, например, у вас был класс PetOwner с методом train (), вы можете определить его как принимающий объект типа Animal, например. train (Animal a), а не создание метода для каждого подтипа Animal.

137
ответ дан 24 November 2019 в 10:54
поделиться

Используйте абстрактные классы, когда вы определяете поведение класса в своей иерархии классов, которое никогда не будет использоваться для создания экземпляра объекта напрямую.

Итак, подумайте о себе как о Боге на мгновение. Ваши классы CBabyBoy и CBanyGirl не будут абстрактными - это твердые объекты, которые создаются. С другой стороны, ваши классы CPerson и CAnimal БУДУТ абстрактными - они полезны с точки зрения иерархии типов, но вы никогда не будете запускать CAnimal dingbat = new Animal ();

3
ответ дан 24 November 2019 в 10:54
поделиться

Вы используете их для классов, которые никогда не будут созданы (то есть фактически не существуют), но вы хотите наследовать от них по причинам полиморфизма.

4
ответ дан 24 November 2019 в 10:54
поделиться

По сути, вы должны использовать абстрактный класс, когда у некоторого объекта в вашей иерархии логически будут методы, которые он не знает, как реализовать, но он потомки делают. На самом деле в Интернете есть миллиарды примеров из реальной жизни)

2
ответ дан 24 November 2019 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: