Абстрактные методы и классы

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

В абстрактном классе возможно объявлять так же и простые способы и поля, каковые смогут быть унаследованы.

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

Не обращая внимания на то, что слишком общий класс не имеет возможности иметь экземпляров, он может иметь конструктор, что смогут применять для инициализации его полей потомки.

Объявление абстрактного класса начинается с главного слова abstract.

Пример:

В примере создается слишком общий класс Car, имеющий простое поле ($petrol) и способ (startEngine()), и слишком общий способ (stopEngine()). Сейчас класс, унаследованный от класса Car, обязан будет содержать реализацию способа stopEngine() либо также должен быть заявлен как слишком общий, в другом случае еще до начала исполнения скрипта случится неточность. В нашем случае дочерний класс InjectorCar содержит способ stopEngine() и обрисовывает его действия.

Задание 9

1. Создайте слишком общий класс AUser;

2. В абстрактном классе AUser заявите слишком общий способ showInfo();

3. Обновите класс User, унаследовав его от абстрактного класса AUser;

4. Внесите в класс User нужные трансформации;

5. Запустите код и удостоверьтесь в надежности его работоспособность.

Интерфейсы

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

Интерфейсы объявляются равно как и простые классы, но с применением главного слова interface; тела способов интерфейсов должны быть безлюдными.

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

Для включения интерфейса в класс программист обязан применять главное слово implements и обрисовать функционал способов, перечисленных во включаемом интерфейсе.

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

Стоит так же отметить ещё одно отличие интерфейсов от абстрактных классов – один класс может реализовывать сколь угодно большое количество интерфейсов. Для этого их имена легко необходимо перечислить через запятую по окончании главного слова implements. Унаследовать же пара абстрактных классов запрещено. Это связанно с тем, что в абстрактных классах смогут находиться разные реализации не абстрактных способов с однообразными именами, и при наследовании этих классов не светло, какую реализацию унаследовать потомку. В интерфейсах же реализованные способы отсутствуют и, в случае если класс имплементирует пара интерфейсов, в которых находиться абстрактные способы с однообразными именами, то какой из этих способов будет реализован в классе безразлично.

В более широком смысле под интерфейсом довольно часто знают легко функционал, оторванный от реализации, другими словами то, что что-то может делать и не имеет значение как оно это делает.

Пример:

В примере обрисованы два интерфейса (Hand, Foot) и способы, каковые должны содержать наследники данных интерфейсов. Класс Human имплементирует оба интерфейса и уже содержит реализацию всех способов, заданных Интерфейсами.

классы и Методы final

Главное слово final разрешает помечать способы, дабы наследующий класс не имел возможности

перегрузить их. По окончании объявления класса final он не может быть унаследован.

Задание 10

1. Создайте интерфейс ISuperUser;

2. В интерфейс ISuperUser заявите способ getInfo();

3. Обрисуйте способ getInfo() в классе SuperUser;

4. Способ getInfo() обязан возвращать ассоциативный массив, в котором именами ячеек являются имена особенностей объекта, а значениями ячеек — значения особенностей объекта;

5. Приведите к методу getInfo() для экземпляра класса SuperUser;

6. В цикле выведите эти, полученные посредством способа getInfo().

Урок 11. PHP — ООП. классы и Абстрактные методы. классы и Финальные методы.


Также читать:

Понравилась статья? Поделиться с друзьями: