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

Anonim

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

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

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

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

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

Хотя интерфейсы используются для определения общих интерфейсов, абстрактные типы могут использоваться для определения и обеспечения соблюдения протокола (который представляет собой набор операций, которые должны поддерживать все объекты, реализующие требуемый протокол). Абстрактные типы не встречаются в языках без подтипирования. Поскольку такие подтипы вынуждены внедрять все необходимые функции, гарантируя правильность выполнения программы. Существует несколько способов создания абстрактных типов: полные абстрактные базовые классы - это классы, которые либо явно объявлены абстрактными, либо содержат абстрактные (нереализованные) методы; Common Lisp Object Systems включает в себя микшины, основанные на системе Flavors; Java, конечно; и черты, которые действуют как расширение для Smalltalk.

Резюме: 1. Абстрактные классы (или типы) объявляют программы; интерфейсы являются абстрактными типами, которые должны реализовывать все классы, чтобы указать их интерфейс. 2. Абстрактные типы могут быть обозначены с использованием ключевого слова явно; интерфейсы по своей сути абстрактны, поэтому не нужно указывать с помощью ключевого слова вообще (если только определенный класс не реализует интерфейс, но не реализует все его методы).