Преимущества использования абстрактные классы по сравнению с регулярным классом

Я решил начать делать маленькие проекты кодирования самостоятельно, что внимание на качество кода вместо количества кода и имеет вопрос об использовании абстрактных классов.

Теперь я знаю различия между абстрактными классами и интерфейсами с самым большим (я думаю), являющийся тем интерфейсом, позволяют Вам только определять методы, которые должны быть реализованы классами с помощью интерфейсных и абстрактных классов, разрешающих Вам определить и метод и участников наряду с реализацией метода по умолчанию если Вы, так требуйте. Мой вопрос что основное преимущество использования абстрактный класс по сравнению с нормальным классом? Единственная реальная разница между двумя, что я могу думать, - то, что Вы не можете создать экземпляр абстрактного класса. Есть ли какие-либо другие различия между двумя?

21
задан ryanzec 5 July 2010 в 22:18
поделиться

3 ответа

Строго из с точки зрения дизайна, лучше все упростить. Я считаю, что лучший способ упростить ситуацию - использовать простую аналогию. Давайте воспользуемся аналогией с птицами ...

Интерфейс: используйте его, когда вы хотите обеспечить выполнение определенных функций, которые необходимо определить. например IBird имеет контракт на ScreamLikeABird и Fly (функции интерфейса). Но вы можете уточнить и получить IOstrich с контрактом Run. У вас также может быть IHawk с контрактом Attack ... и т. Д.

Аннотация: используйте это, если вы хотите принудительно применить базовые функции и иметь базовые свойства. например Avian может быть базовым классом для птиц, который может иметь функцию LayEgg, а также свойства Age, Species, NumberOfChicks и т. Д. Эти вещи не меняют / не должны изменять поведение птицы, поскольку все птицы откладывают яйца ... и т. Д. Но не все птицы звучат одинаково, когда они кричат ​​или летят одинаково (некоторые даже не летают) .... и т. Д., Поэтому они должны быть реализованы через интерфейс (-ы).

20
ответ дан 29 November 2019 в 20:39
поделиться

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

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

13
ответ дан 29 November 2019 в 20:39
поделиться

Абстрактные классы могут использоваться для хранения методов в «библиотеке» на основе ООП; поскольку для класса не требуется создавать экземпляры и это не имеет смысла, хранение общих статических методов внутри абстрактного класса является обычной практикой.

-2
ответ дан 29 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

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