Полиморфизам у Јава ООП-има са примером

Преглед садржаја:

Anonim

Шта је полиморфизам у Јави?

Полиморфизам у Јави се јавља када постоји једна или више класа или објеката који су међусобно повезани наслеђивањем. Другим речима, то је способност предмета да поприми различите облике. Наслеђивање омогућава корисницима да наследе атрибуте и методе, а полиморфизам их користи за обављање различитих задатака. Дакле, циљ је комуникација, али приступ је другачији.

На пример, имате паметни телефон за комуникацију. Режим комуникације који одаберете може бити било који. То може бити позив, текстуална порука, сликовна порука, пошта итд. Дакле, заједнички циљ је комуникација, али њихов приступ је другачији. Ово се назива полиморфизам.

У овом упутству ћете научити-

  • Шта је полиморфизам?
  • Јава полиморфизам у ООП-има са примером
  • Надјачавање методе
  • Разлика између преоптерећења и замене
  • Шта је динамички полиморфизам?
  • Супер Кеиворд
  • Разлика између статичког и динамичког полиморфизма

Кликните овде ако видео снимку није доступан

Јава полиморфизам у ООП-има са примером

Имамо један родитељски разред, „Рачун“ са функцијом депоновања и подизања. Рачун има 2 подређене класе . Депозит и повлачење је исти за Штедњу и Провера рачуна. Дакле, наслеђене методе из класе Аццоунт ће радити.

Промена захтева за софтвер

Постоји промена у спецификацији захтева, нешто што је тако често у индустрији софтвера. Требало би да додате привилеговани банкарски рачун с функцијом прекорачења.

Као позадину, прекорачење је могућност у којој можете подићи износ већи од расположивог стања на вашем рачуну.

Дакле, поново повуците метод повлачења за привилеговане потребе. Али тестирани део кода не мењате у Штедном и чековном рачуну. Ово је предност ООПС-а

Корак 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();

Овде је референтна променљива „обј“ родитељске класе, али објекат на који показује је подређене класе (као што је приказано на дијаграму).


обј.треатПатиент () извршиће методу треатПатиент () подкласе - Сургеон

Ако се референца основне класе користи за позивање методе, метод који ће се позвати одлучује ЈВМ, у зависности од објекта на који референца показује

На пример, иако је обј референца на доктора, он позива метод хирурга, јер указује на хируршки објекат

За ово се одлучује током времена извођења и отуда се назива динамички или време извођења полиморфизам

Супер Кеиворд

Шта ако метода треатПатиент у класи Сургеон жели да изврши функционалност дефинисану у класи Доцтор и затим изврши своју специфичну функционалност?
У овом случају, кључна реч

superможе се користити за приступ методама надређене класе из подређене класе.
Метода ТреатПатиент у класи хирурга може се написати као:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Кључна реч супер може се користити за приступ било ком члану података или методама супер класе у подкласи.Пример: -Да научите наслеђивање, полиморфизам и супер кључну реч

Корак 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) Грешка =? То је зато што поткласа не може приступити приватним члановима супер класе.

Разлика између статичког и динамичког полиморфизма

Статички полиморфизам Динамички полиморфизам
Односи се на преоптерећење метода. Односи се на надјачавање метода.

Грешке, ако их има, решавају се током компајлирања. Пошто се код не извршава током компајлирања, отуда и назив статиц.

Пример:

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();