Page 73 - 6253
P. 73
System.out.println("Об'єм коробки: " + vol);
System.out.println("Вага коробки: " + mybox.weight);
System.out.println();
// Створення об'єкту класу Box
Box superbox = new Box();
// Присвоєння змінній superbox посилання на об'єкт класу BoxWeight
superbox = mybox;
vol = superbox.volume();
System.out.println("Об'єм коробки: " + vol);
/* Наступний код помилковий, оскільки у класі Box
не визначено змінної weight */
// System.out.println("Вага коробки: " + superbox.weight);
}
}
У наведеному прикладі змінна mybox є посиланням на об'єкт класу
BoxWeight, a superbox – посилання на об'єкт класу Box. Оскільки BoxWeight –
підклас класу Box, то посиланню superbox можна присвоїти посилання на об'єкт
класу BoxWeight.
Доступні методи та змінні визначаються типом посилальної змінної, а не
типом об'єкту, на який вона посилається. Тобто, при присвоєнні посилальній змінній
суперкласу посилання на об'єкт підкласу, доступ надається тільки до методів та
змінних визначених у суперкласі. Саме тому об'єкт superbox не має доступу до
змінної weight навіть у випадку, коли він посилається на об'єкт класу BoxWeight,
оскільки суперкласу не відомо, які саме методи та змінні визначені у підкласі. Тому
останній рядок коду у прикладі закоментований, так як посилання на об'єкт класу
72