У попередній статті коротко було
розказано про суперкласи та підкласи. Якщо клас успадковує метод з свого
суперкласу, то цей метод може заміщуватися за умови, що він не позначений final.
Користь з заміщення це є можливість
підкласу надавати специфічну реалізацію методу, що вже реалізований в одному із
суперкласів
Заміщення
використовується тоді, коли ви переписуєте (переробляєте, заміщуєте) вже
існуючий метод.
Так заміщення виглядає на
прикладі:
Результат виконання цього
коду наступний:
Animals can move
Dogs can walk and run
У наведеному вище
прикладі, ми можемо бачити, що при тому, що b є типу Animal, b викликає метод який є заміщеним в
класі Dog. Причина цього полягає в
тому: що під час компіляції, відбувається перевірка, типу посилання. Проте, в
середовищі виконання, JVM з'ясовує тип об'єкта, і викликає метод який належить
до конкретного об'єкта.
Розглянемо наступний
приклад:
Результатом виконання
буде:
Exception in thread "main" java.lang.Error:
Unresolved compilation problem:
The method
bark() is undefined for the type Animal
Ця програма буде кидати
помилку часу компіляції, так як b є
типу Animal який не має методу по імені bark().
Правила для заміщення методу:
- Список аргументів повинен
бути точно таким, як і у методу який заміщується.
- Тип
що повертається повинен бути таким як тип що оголошений в оригінальному методі
в суперкласі.
- Рівень
доступу не може бути меншим, ніж рівень доступу в оригінальному методі. Наприклад:
якщо метод суперкласу оголошений public
то заміщений метод в підкласі не може бути private
або protected.
- Метод, оголошений final не може бути заміщеним.
- Метод,
оголошений static не може бути
заміщеним,
але може бути повторно оголошений.
- Якщо метод не може бути
наслідуваний то він не може бути заміщеним.
- Підклас в тому ж пакеті,
що й суперклас може заміщувати будь-який метод суперкласу, який не оголошений private чи final.
- Підклас в іншому пакеті
може заміщувати тільки методи що
оголошені public чи protected.
- Заміщений метод не повинний кидати винятки, які є новими або
ширші, ніж ті, які заявлені в оригінальному методі. Заміщений метод може кинути
вужчі або менше винятків, ніж в оригінальному методі.
- Конструктори не можуть
бути заміщеними.
Використання ключового слова super:
При виклику версії оригінального
методу суперкласу, з заміщеного методу використовується ключове слово super.
Цей код дає наступний
результат:
Animals can move
Dogs can walk and run
Поліморфізм(Polymorphism) в джава.
Немає коментарів:
Дописати коментар