Страницы

пʼятниця, 7 листопада 2014 р.

Заміщення(Overriding) методу в Java.

У попередній статті коротко було розказано про суперкласи та підкласи. Якщо клас успадковує метод з свого суперкласу, то цей метод може заміщуватися за умови, що він не позначений 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) в джава.

Немає коментарів:

Дописати коментар