Page 62 - 4636
P. 62

У  результаті  перекрити  operation()  у  класі  вже  буде  не  можливо.  Якщо  ви  спробуєте  це
        зробити, то отримаєте помилку такого виду: Fatal error: Cannot override final A method:: operation ()
        Фатальна  помилка:  Неможливо  перевизначити  фінальний  метод  A:  .'operation  ().  Можна  також
        заборонити  створювати  підкласи  на  основі  заданого  класу,  помістивши  ключове  слово  final  перед
        визначенням  класу,  наприклад:final  class  А{  1  ...    При  спробі  успадкувати  клас  від  А  буде
        генеруватися помилка: Fatal error: Class may not inherit from final class (A). Фатальне зіткнення: Клас
        не може бути успадкований від фінального класу (А)
           Множинне спадкування
           У  деяких  об'єктно-орієнтованих  мовах  (наприклад,  C++  і  Smalltalk)  допускається  множинне
        спадкування,  однак  РНР  його  не  підтримує.  Це  означає,  що  кожен  клас  може  успадковувати
        характеристики тільки від одного батьківського класу. Кількість дочірніх класів, які мають загальний
        батьківський клас, не обмежується. Ймовірно, сказане буде зрозуміло не відразу. На рис. 2.4 показано
        три можливі способи спадкування для трьох класів А, В та С.




























                                Рисунок 2.4 - РНР не підтримує множинне успадкування

           Комбінація зліва на рис. 6.1 показує, що клас C успадковується від класу В, який, у свою чергу,
        успадковується від класу А. Кожен клас має не більше одного батьківського класу, отже, це цілком
        допустиме у РНР одиночне успадкування.
           Комбінація в центрі на малюнку відображає, що класи В і С успадковуються від класу А. Кожен
        клас  має  не  більше  одного  батьківського  класу,  отже,  і  це  допустиме  одиночне  успадкування.
        Комбінація праворуч показує, що клас C успадкований від двох класів А та В. В цьому випадку клас C
        має два батьківські класи, отже, це множинне успадкування, яке у РНР не підтримується.
           Реалізація інтерфейсів
           Якщо  все  ж  потрібно  щось  на  кшталт  множинного  спадкування,  у  РНР  це  можна  зробити  за
        допомогою  інтерфейсу  (interface).  Інтерфейс  розглядається  як  штучна  заміна  множинного
        спадкоємства і подібний до концепції інтерфейсів, яка підтримується в інших об'єктно-орієнтованих
        мовах, таких як Java. Основна ідея інтерфейсу полягає в специфікації набору функцій, які мають бути
        написані в класах, що реалізують цей  інтерфейс. Наприклад, ви можете вирішити, що якийсь набір
        класів повинен мати можливість відображати себе. Замість того щоб створювати батьківський клас з
        функцією  display(),  яку  потім  повинні  успадкувати  і  перевизначити всі  класи  з  набору,  можна
        реалізувати інтерфейс, як показано нижче:
           interface Displayable {
           function display ();
           }
           class webPage implements Displayable { function

                                                            59
   57   58   59   60   61   62   63   64   65   66   67