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
   68   69   70   71   72   73   74   75   76   77   78