Page 77 - 6253
P. 77
System.out.println("Об'єм mybox1:\t" + mybox1.volume());
System.out.println("Об'єм mybox2:\t" + mybox2.volume());
System.out.println("Об'єм mycube:\t" + mycube.volume());
System.out.println("Об'єм myclone:\t" + myclone.volume());
}
}
Запустивши програму на виконання отримаємо наступний результат:
Об'єм mybox1: 3000.0
Об'єм mybox2: -1.0
Об'єм mycube: 125.0
Об'єм myclone: 3000.0
Особливий інтерес представляє випадок створення дубліката об’єкта, де
оператор super() викликається з параметром типу BoxWeight, а не Box. У цьому
випадку буде викликаний конструктор базового класу Вох(Вох ob). Як уже
зазначалося, змінна типу базового класу може посилатися на об’єкт, який
визначений у підкласі. Проте, у цьому випадку класові Box відомі тільки його власні
змінні width, height та depth, а змінна weight ініціалізується у відповідному
конструкторі класу BoxWeight. Під час виклику оператора super() виконується
конструктор базового класу, який в ієрархії перебуває на один рівень вище від
конструктора класу, який його викликає.
Друга форма ключового слова super по функціональності подібна до
ключового слова this, за винятком того, що завжди посилається на суперклас
підкласу, в якому вона використана. Загальна форма застосування ключового слова
super має наступний вигляд.
super.об’єктна_змінна
Ця форма застосування ключового слова super використовується у випадках,
коли імена членів підкласу «перекривають» члени суперкласу з такими ж іменами.
Для прикладу, розглянемо наступну ієрархію класів.
// Використання ключового слова super для запобігання перекривання імен
class А {
int i;
76