Поліморфізм в ООП Java на прикладі

Зміст:

Anonim

Що таке поліморфізм у Java?

Поліморфізм у Java виникає тоді, коли існує один або кілька класів або об’єктів, пов’язаних між собою за успадкуванням. Іншими словами, це здатність об’єкта приймати різні форми. Спадкування дозволяє користувачам успадковувати атрибути та методи, а поліморфізм використовує ці методи для виконання різних завдань. Отже, мета - спілкування, але підхід інший.

Наприклад, у вас є смартфон для спілкування. Вибраний вами режим спілкування може бути будь-яким. Це може бути дзвінок, текстове повідомлення, графічне повідомлення, пошта тощо. Отже, загальною метою є спілкування, але підхід у них інший. Це називається поліморфізмом.

У цьому підручнику ви дізнаєтесь-

  • Що таке поліморфізм?
  • Поліморфізм Java в ООП на прикладі
  • Заміна методу
  • Різниця між перевантаженням та перевизначенням
  • Що таке динамічний поліморфізм?
  • Супер ключове слово
  • Різниця між статичним та динамічним поліморфізмом

Клацніть тут, якщо відео недоступне

Поліморфізм Java в ООП на прикладі

У нас є один батьківський клас, «Рахунок» з функцією депозиту та зняття коштів. Обліковий запис має 2 дочірні класи Операція внесення та зняття коштів однакова для збереження та перевірки рахунків. Тож успадковані методи з класу Account працюватимуть.

Зміна вимог до програмного забезпечення

Змінюються специфікації вимог, що є настільки поширеним явищем у галузі програмного забезпечення. Ви повинні додати функціональний привілейований банківський рахунок за допомогою овердрафту.

У фоновому режимі овердрафт - це можливість, з якої ви можете зняти суму, більшу, ніж доступна сума на вашому рахунку.

Отже, метод вилучення для привілейованих потреб повинен бути реалізований заново. Але ви не змінюєте перевірений фрагмент коду в Ощадному та чековому рахунках. Це перевага OOPS

Крок 1) Такий, що при виклику методу "вилучення" для збереження рахунку виконується метод із класу батьківського рахунку.

Крок 2) Але коли метод "Вивести" для привілейованого рахунку (овердрафт) викликається, метод зняття, визначений у привілейованому класі, виконується. Це Поліморфізм.

Заміна методу

Заміна методу - це перевизначення методу суперкласу в підкласі.

Правила заміни методів

  • Підпис методу, тобто назва методу, список параметрів і тип повернення, повинні точно відповідати.
  • Перевизначений метод може розширити доступність, але не звузити, тобто, якщо він є приватним у базовому класі, дочірній клас може зробити його загальнодоступним, але не навпаки.

Приклад

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Різниця між перевантаженням та перевизначенням

Метод Перевантаження Заміна методу

Перевантаження методів знаходиться в одному класі, де більше ніж один метод має однакову назву, але різні підписи.

Перевизначення методу - це коли один із методів у суперкласі перевизначається в підкласі. У цьому випадку підпис методу залишається незмінним.

Приклад:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Приклад:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Що таке динамічний поліморфізм?

Динамічний поліморфізм - це механізм, за допомогою якого в суперкласі та підкласі можна визначити декілька методів з однаковим іменем та підписом. Виклик перевизначеного методу вирішується під час виконання.

Приклад динамічного поліморфізму:

Посилальна змінна суперкласу може посилатися на об'єкт підкласу

Doctor obj = new Surgeon();

Розгляньте твердження

obj.treatPatient();

Тут посилальна змінна "obj" є батьківським класом, але об'єкт, на який вона вказує, є дочірнім класом (як показано на схемі).


obj.treatPatient () виконає метод treatPatient () підкласу - Surgeon

Якщо для виклику методу використовується посилання на базовий клас, метод, який потрібно викликати, визначається JVM, залежно від об'єкта, на який вказує посилання

Наприклад, навіть якщо obj є посиланням на Doctor, він викликає метод Surgeon, оскільки вказує на об'єкт Surgeon

Це вирішується під час виконання і, отже, називається динамічним або тривалим поліморфізмом

Супер ключове слово

Що робити, якщо метод treatPatient у класі Surgeon хоче виконати функціональність, визначену в класі Doctor, а потім виконати власну специфічну функціональність?
У цьому випадку ключове слово

superможе використовуватися для доступу до методів батьківського класу з дочірнього класу.
Метод treatPatient у класі хірурга можна записати так:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Ключове слово super може використовуватися для доступу до будь-якого члена даних або методів супер класу в підкласі.Приклад: -Щоб вивчити спадщину, поліморфізм та ключове слово super

Крок 1) Скопіюйте наступний код у редактор

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

Крок 2) Збережіть, скомпілюйте та запустіть код. Дотримуйтесь результатів.
Крок 3) Коментарі до рядків №6–9. Збережіть, скомпілюйте та запустіть код. Дотримуйтесь результатів.
Крок 4) Рядок для коментарів №10. Збережіть і скомпілюйте код.
Крок 5) Помилка =? Це тому, що підклас не може отримати доступ до приватних членів супер класу.

Різниця між статичним та динамічним поліморфізмом

Статичний поліморфізм Динамічний поліморфізм
Це стосується перевантаження методів. Це стосується перевизначення методу.

Помилки, якщо вони є, усуваються під час компіляції. Оскільки код не виконується під час компіляції, звідси і назва static.

Приклад:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

Якщо посилальна змінна викликає перевизначений метод, метод, який потрібно викликати, визначається об'єктом, на який вказує ваша посилальна змінна. Це може бути визначено лише під час виконання, коли код не виконується, звідси і назва динамічний.

Приклад:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();