Абстрактный класс или интерфейс

Рассматриваемые рекомендации приемлемы для языка C# и платформы .net. Если рассмотреть абстрактный класс без реализации, он может быть сильно похож на интерфейс, что еще больше запутывает разработчиков. Рассмотрим подробнее что есть что.

Abstract class

Абстрактные классы это особые виды классов. Экземпляры таких классов не могут быть созданы. Может возникнуть вопрос: для чего же они нужны? Абстрактные классы нужны для создания наследования. Они позволяют производным классам быть потомками абстрактного класса и обязывают реализовать абстрактные методы и свойства. Другими словами, абстрактный класс создает некий вид иерархии. Важно заметить, класс может наследоваться только от одного другого класса.

Interfaces

Интерфейс не является классом. Это набор свойств, методов и событий без их явного определения. Интерфейс не может содержать полей. Другое важное отличие в том, что тип может наследоваться от нескольких интерфейсов одновременно. При этом интерфейс не говорит как именно тип должен делать те или иные методы. Также интерфейс не имеет модификаторов доступа. Все объекты, объявленные в интерфейсе, по  умолчанию публичные.

Выводы

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

Не следует путать абстрактные классы и абстрактные методы. Кроме того, можно комбинировать абстрактные классы и интерфейсы. Если у вас остались вопросы или не все вопросы, рассмотренные в этой заметке ясны буду рад обсудить их в комментариях.

Комментарии

comments powered by Disqus