просмотров:139132

Php :: Интерфейсы и Абстрактные классы   10 января 2015

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


Абстрактный класс — это возможность вынести дублирующийся код и явно это отметить в иерархии. В абстрактном классе «определяется лишь самая общая форма для всех его производных классов, а наполнение ее деталями предоставляется каждому из этих классов. абстрактный класс предполагает наличие как сигнатур, так и некой реализации по умолчанию для некоторых методов (как писали выше, это возможность вынести дублирующийся код). он используется при наследовании, в дочерних классах можно переопределить методы, а можно оставить реализацию самого абстрактного класса. абстрактный класс определяет общее поведение для объектов одного типа, в отличие от интерфейса, который может использоваться в классах различных не связанных между собой объектов.
нельзя инициализировать объект абстрактного класса — это отличие от использования обычного класса для наследования. В абстрактном классе может быть и реализация простых методов, но абстрактные методы должны быть без реализации и ОБЯЗАТЕЛЬНО должены быть переопределены в дочернем классе, если дочерний не является абстрактным. Класс, в котором объявлен хотя бы один абстрактный метод, должен быть объявлен абстрактным.
Используется как базис, основа, некая общая форма, которую будут совместно использовать все его подклассы, добавляя необходимые детали.



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

просмотров:139132 | комметариев: 0

Оставить комментарий:    

Ваше имя:
 
Текст комментария:
 
+ 1 =