Page 74 - 6253
P. 74

Box не має доступу до змінної weight, оскільки вона не визначена у класі Box.


                    Ключове слово super

                    Представлений у попередньому прикладі конструктор класу BoxWeight, явно

            не  ефективний.  По-перше,  він  повторює  конструктор  базового  класу,  а,  по-друге,

            має доступ до елементів базового класу. Така реалізація порушує один із основних

            принципів ОПП, а саме інкапсуляцію. Для нормального виходу з цієї ситуації у мові

            Java передбачено ключове слово super. Воно використовується у двох випадках: 1)

            виклику  конструктора  базового  класу;  2)  доступу  до  членів  базового  класу,

            перевизначених у підкласі.

                    Синтаксис виклику конструктора базового класу із підкласу наступний:

                    super(список_параметрів);

                    До  списку  параметрів  належать  усі  параметри,  необхідні  конструкторові

            базового  класу.  Оператор  super()  буде  першим  оператором,  який  виконається  у

            конструкторі  підкласу.  У  випадку,  якщо  в  підкласі  конструктор  не  визначено,  то


            викличеться конструктор заданий за замовчуванням або конструктор без параметрів
            базового класу.


                    Як  приклад  використання  оператора  super()  розглянемо  наступну
            удосконалену версію класу BoxWeight.


                    // Використання оператора super()
                    class BoxWeight extends Box {


                     double weight;

                     BoxWeight( double w, double h, double d, double m){



                       // Виклик конструктора базового класу

                       super(w, h, d); weight = m;

                     }

                    }

                    Така  реалізація  класу  гарантує,  що  змінні  базового  класу  будуть

            проініціалізовані навіть у випадку, якщо вони оголошені з модифікатором доступу

            private.

                    Оскільки  конструктори  можуть  бути  перевантаженими,  оператор  super()


                                                              73
   69   70   71   72   73   74   75   76   77   78   79