Об’єкти, спадкування і поліморфізм – JAVA ДЛЯ ANDROID

Java підтримує поліморфізм, одну з основних концепцій обєктно-орієнтованого програмування Мова вважається поліморфним, якщо обєкти одного типу можуть проявляти різні поведінки Це відбувається, коли підтипи даного класу можуть присвоюватися змінної, що має тип базового класу Розглянемо це докладніше

При оголошенні підтипів Java використовується ключове слово extends Ось приклад наслідування в Java:

Ragtop – це підтип Саг Вище ми зазначали, що Саг, в свою чергу, є підкласом Object Ragtop змінює визначення методу drive з класу Саг У даному випадку прийнято говорити, що він перевизначає (Override) drive І Car, і Ragtop обидва мають тип Саг (але вони обидва не мають тип Ragtop), І поведінки методу drive, закріплені за ним в кожному з цих класів, різняться

Продемонструємо поліморфну ​​поведінку:

Цей фрагмент коду компілюватиметься без помилок (незважаючи на присвоєння Ragtop змінної, що має тип Саr) Крім того, він виконається без помилок і дасть наступний висновок:

У різні моменти життєвого циклу змінна auto містить посилання на два різних обєкта типу Саr Один з цих обєктів відноситься не тільки до типу Саr, але також до підтипу Ragtop Точне поведінку затвердження auto drive () залежить від того, на якій з обєктів – перший або другий змінна містить посилання в даний момент Це приклад полиморфного поведінки

Як і багато інших обєктно-орієнтовані мови, Java підтримує приведення типів (type casting), що забезпечує перетворення оголошеного типу змінної в будь-який з типів, у поєднанні з якими змінна проявляє поліморфізм:

Приведення буває необхідним, але якщо воно використовується надмірно активно, це свідчить про те, що код недосконалий Очевидно, що за правилами поліморфізму всі змінні можуть бути оголошені як змінні типу Object, а потім при необхідності з ними можна виконувати приведення Але, роблячи так, ми відмовляємося від застосування найважливішого механізму статичної типізації

У Java аргументи методу (тобто його актуальні параметри) повинні бути поліморфні формальним аргументам Аналогічно методи повертають значення, які є поліморфними оголошеному типу що повертається значення Продовжуючи наш автомобільний приклад, розглянемо наступний фрагмент коду, який компілюватиметься і повертатися без помилок:

Метод park оголошується як здатний приймати в якості єдиного параметра обєкт типу Саг Однак у методі LetsGo він викликається з обєктом типу

Ragtop, який є підтипом типу Саг Аналогічно змінної myCar присвоюється значення типу Ragtop, і це значення повертає метод whats InTheGarage Обєкт є Ragtop: якщо ви викликаєте його метод drive, він повідомить вам і про top, і про radio З іншого боку, оскільки він також є Саг, він може використовуватися скрізь, де використовувався б Саг Така можливість заміни підтипів є принциповим прикладом потужності поліморфізму, а також його взаємодії з безпекою типів Навіть на етапі компіляції ясно, за призначенням використовується обєкт чи ні Безпека типів дозволяє компілятору знаходити помилки на ранньому етапі, в той час як їх було б набагато складніше шукати, якби вони виникали під час виконання

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*