Разница между абстрактным классом и интерфейсом

Разница между абстрактным классом и интерфейсом
Разница между абстрактным классом и интерфейсом

Видео: Разница между абстрактным классом и интерфейсом

Видео: Разница между абстрактным классом и интерфейсом
Видео: C# — Абстрактный класс vs Интерфейс 2024, Июль
Anonim

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

Абстрактный класс и интерфейс - это две объектно-ориентированные конструкции, встречающиеся во многих объектно-ориентированных языках программирования, таких как Java. Абстрактный класс можно рассматривать как абстрактную версию обычного (конкретного) класса, а интерфейс можно рассматривать как средство реализации контракта. Абстрактный класс - это класс, который не может быть инициализирован, но может быть расширен. Интерфейс - это тип, который должен быть реализован другими классами. В Java абстрактные классы объявляются с использованием ключевого слова Abstract, а ключевое слово interface используется для определения интерфейса.

Что такое абстрактный класс?

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

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

Что такое интерфейс?

Интерфейс - это абстрактный тип, который используется для указания контракта, который должен быть реализован классами, реализующими этот интерфейс. Ключевое слово interface используется для определения интерфейса, а ключевое слово Implements используется для реализации интерфейса классом (на языке программирования Java). Обычно интерфейс содержит только сигнатуры методов и объявления констант. Любой интерфейс, реализующий конкретный интерфейс, должен реализовывать все методы, определенные в интерфейсе, или должен быть объявлен как абстрактный класс. В Java тип ссылки на объект может быть определен как тип интерфейса. Но этот объект должен либо иметь значение null, либо содержать объект класса, реализующего этот конкретный интерфейс. Используя ключевое слово Implements в Java, вы можете реализовать несколько интерфейсов для одного класса.

В чем разница между абстрактным классом и интерфейсом?

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

Рекомендуемые: