Абстрактный класс против интерфейса
Абстрактный класс и Интерфейс - это две объектно-ориентированные конструкции, встречающиеся во многих объектно-ориентированных языках программирования, таких как Java. Абстрактный класс можно рассматривать как абстрактную версию обычного (конкретного) класса, а интерфейс можно рассматривать как средство реализации контракта. Абстрактный класс - это класс, который не может быть инициализирован, но может быть расширен. Интерфейс - это тип, который должен быть реализован другими классами. В Java абстрактные классы объявляются с использованием ключевого слова Abstract, а ключевое слово interface используется для определения интерфейса.
Что такое абстрактный класс?
Как правило, абстрактные классы, также известные как абстрактные базовые классы (ABC), не могут быть созданы (экземпляр этого класса не может быть создан). Итак, абстрактные классы имеют смысл иметь только в том случае, если язык программирования поддерживает наследование (возможность создавать подклассы из расширения класса). Абстрактные классы обычно представляют абстрактное понятие или сущность с частичной реализацией или без нее. Следовательно, абстрактные классы действуют как родительские классы, от которых производятся дочерние классы, так что дочерний класс будет разделять неполные функции родительского класса, а для их завершения можно добавить функциональные возможности.
Абстрактные классы могут содержать абстрактные методы. Подклассы, расширяющие абстрактный класс, могут реализовывать эти (унаследованные) абстрактные методы. Если дочерний класс реализует все такие абстрактные методы, это конкретный класс. Но если это не так, дочерний класс также становится абстрактным классом. Все это означает, что, когда программист назначает класс абстрактным, он говорит, что класс будет неполным и в нем будут элементы, которые должны быть завершены наследующими подклассами. Это хороший способ заключить контракт между двумя программистами, который упрощает задачи при разработке программного обеспечения. Программист, который пишет код для наследования, должен точно следовать определениям методов (но, конечно, может иметь свою собственную реализацию).
Что такое интерфейс?
Интерфейс - это абстрактный тип, который используется для определения контракта, который должен быть реализован классами, реализующими этот интерфейс. Ключевое слово interface используется для определения интерфейса, а ключевое слово Implements используется для реализации интерфейса классом (на языке программирования Java). Обычно интерфейс содержит только сигнатуры методов и объявления констант. Любой интерфейс, реализующий конкретный интерфейс, должен реализовывать все методы, определенные в интерфейсе, или должен быть объявлен как абстрактный класс. В Java тип ссылки на объект может быть определен как тип интерфейса. Но этот объект должен быть либо нулевым, либо содержать объект класса, который реализует этот конкретный интерфейс. Используя ключевое слово Implements в Java, вы можете реализовать несколько интерфейсов для одного класса.
В чем разница между абстрактным классом и интерфейсом?
Абстрактные классы обычно представляют абстрактное понятие или объект с частичной реализацией или без нее. С другой стороны, интерфейс - это абстрактный тип, который используется для определения контракта, который должен быть реализован классами. Абстрактные классы должны быть унаследованы (или расширены), а интерфейсы должны быть реализованы. Абстрактные классы могут содержать абстрактные методы, тогда как интерфейс должен содержать только абстрактные методы. Абстрактные классы могут содержать любые переменные, но интерфейсы могут определять только константы. Класс не может наследовать более чем от одного абстрактного класса, но может реализовывать несколько интерфейсов. Интерфейс не может реализовать другой интерфейс. Однако интерфейс может расширять класс.