Page 21 - 4657
P. 21
класу В. У наступній рядку ми викликали метод callme. При
цьому транслятор перевірив наявність методу callme у класу А, а
виконуюча система, побачивши, що насправді в змінній
зберігається екземпляр класу В, викликала не метод класу А, а
callme класу В. Нижче приведений результат роботи цієї
програми:
С:\> Java Dispatch
Inside B's calime method
Програмістам Delphi / C++ слід зазначити, що всі Java за
замовчуванням є віртуальними функціями (ключове слово
virtual).
Розглянута форма динамічного поліморфізму часу
виконання являє собою один з найбільш могутніх механізмів
объектно-оріентованного програмування, що дозволяють писати
надійний, багаторазово використовуваний код.
Ключове слово final
Усі методи і змінні об'єкти можуть бути заміщені по
замовчуванню. Якщо ж ви хочете оголосити, що підкласи не
мають права заміщення якіх-небудь змінних і методів вашого
класу, вам потрібно оголосити їх як final (у Delphi / C++ не
писати слово virtual).
final int FILE_NEW = 1;
За загальноприйнятою згодою при виборі імен змінних типу
final - використовуються тільки символи верхнього регістра
(тобто використовуються як аналог препроцерних констант
C++). Використання final-методів часом приводить до виграшу у
швидкості виконання коду - оскільки вони не можуть бути
заміщені, транслятору ніщо не заважає заміняти їхні виклики
убудованим (in-line) кодом (байт-код копіюється безпосередньо
в код зухвалого методу).
19