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