what is polymorphism java tutorial with examples
Ovaj vodič objašnjava što je polimorfizam u Javi, vrste polimorfizma i kako primijeniti polimorfizam vremena kompajliranja s primjerima:
Riječ 'Polimorfizam' potječe od dvije riječi tj. 'Poli' što znači mnogi i ' morfi ”Značenje oblika. Dakle, polimorfizam znači mnoge oblike. U programskom jeziku možemo reći da objekt može poprimiti različite oblike, pa je stoga i polimorfan.
Polimorfizam je jedno od najvažnijih obilježja OOP-a i omogućuje nam da izrazimo značajku (objekt ili poruku ili metodu ili operatora) u različitim oblicima.
=> Ovdje pogledajte Vodič za početnike za Java.
Što ćete naučiti:
Uvod u polimorfizam u Javi
Polimorfni entitet ponaša se različito u različitim scenarijima.
Na primjer, razmotrite operator ‘+’ (dodavanje) u Javi. Ovo je binarni operator i uzima dva operanda. Kada su operandi koji se prosljeđuju operatoru '+' brojevi, izvodi se operacija zbrajanja koja vraća zbroj dva broja.
Kada se operandi promijene u vrstu String, operator ‘+’ ne dodaje String objekte, već spaja ili pridružuje sadržaj niza da bi se dobio treći rezultantni niz.
Na primjer, ako “ jedan 'I' dva ”Su tada sadržaji dva String objekta 'Jedan' + 'dva' rezultirat će ' jedan dva '. Ovo je spajanje.
U Javi su svi objekti polimorfni jer su svi izvedeni iz klase 'Object' i tako ispunjavaju odnos 'IS-A' s razredom Object.
Objektu se uvijek pristupa putem referentne varijable određenog tipa klase. Jednom kada je referentna varijabla određenog tipa deklarirana, ona se ne može mijenjati. Međutim, ako referentna varijabla nije deklarirana kao 'Konačna', tada je možemo dodijeliti da usmjerava na druge objekte.
Vrsta ove reference objekta odlučit će o metodama ili funkcijama klase koje treba pozvati.
Na primjer,ako postoji ABC klasa i klasa XYZ izvedene iz ABC, obje klase imaju polimorfnu metodu func ().
class ABC{ void func(){} } class XYZ extends ABC{ void func() {} } Stvorimo referencu tipa ABC.
obj = new XYZ (); Sada kada pozivamo metodu func (), budući da je objekt na koji pokazuje obj klase XYZ, bit će pozvana metoda func () iz klase XYZ.
Kao što smo vidjeli u gornjem primjeru, metoda func () ima različite implementacije, ali isti prototip. Ovisno o objektu na koji upućuje referentni objekt, u tom se scenariju poziva odgovarajuća implementacija. Ovo je polimorfizam.
Razmotrimo detaljno polimorfizam u Javi.
Primjer Java polimorfizma
Razumijemo jednostavan primjer polimorfizma u Javi s operacijom zbrajanja kao što je prethodno spomenuto.
Ovdje koristimo dvije metode s istim nazivom, ali različitim parametrima. Prva funkcija prihvaća dva cjelovita parametra, a druga metoda prihvaća dva parametra niza.
Ovisno o vrsti prosljeđenih parametara, poziva se odgovarajuća metoda koja dodaje dvije cijele brojeve i ispisuje rezultat ili spaja dva niza i ispisuje rezultirajući niz.
Java program je dan u nastavku:
class Addition_operation{ //method to add two integers void addition_func(int num1,int num2){ System.out.println('ABC::addition_func:' + (num1+num2)); } //overloaded method to add two strings void addition_func(String str1, String str2){ String result = str1 + ' ' + str2; System.out.println('XYZ::addition_func:' + result); } } public class Main { public static void main(String() args) { Addition_operation abc = new Addition_operation(); //create a class object abc.addition_func (3,4); //calls 1st method abc.addition_func ('Hello' , 'World!'); //calls 2nd method } }Izlaz:

Ovdje smo vidjeli da kada se prvi put proslijede dva cjelobrojna parametra u add_func, tada se poziva prva metoda. U drugom pozivu funkcije prosljeđujemo dva parametra tipa String i stoga se poziva druga preopterećena metoda.
Vrste polimorfizma
Java podržava dvije vrste polimorfizma:
- Polimorfizam kompilacije
- Polimorfizam vremena izvođenja

Kao što i samo ime govori, polimorfizam vremena kompajliranja izvodi se u vrijeme kompajliranja, a polimorfizam vremena izvođenja vrši se za vrijeme izvođenja.
Kao što je prikazano na gornjoj slici, polimorfizam kompiliranog vremena implementiran je preopterećenjem. Možemo preopteretiti ili metodu ili operator. Izvršni polimorfizam postiže se Nadjačavanjem.
navedite sve operativne sustave koji su vam poznati
U ovom uputstvu detaljno ćemo razmotriti polimorfizam kompilacije. U nastavku ćemo se upoznati s polimorfizmom izvođenja.
Vrijeme polimorfizma kompilacije u Javi
Polimorfizam kompilacije poznat je i kao 'statički polimorfizam'. Kao dio polimorfizma u vremenu prevođenja, bilo koji polimorfizam koji se treba izvesti, izvodi se u vrijeme prevođenja.
U Javi se polimorfizam vremena kompajliranja izvodi pomoću ' Preopterećenje metode '. Korištenjem preopterećenja metoda možemo imati jednu ili više metoda s istim nazivom i diferencirane samo na brojeve ili vrstu ili redoslijed parametara.
Preopterećenje metoda najčešća je primjena polimorfizma vremena kompajliranja u Javi. Java također podržava preopterećenje operatera.
Što je preopterećenje u Javi uopće?
Preopterećenje u Javi proces je koji ima više metoda s istim imenom i tipom povratka, ali se razlikuje u slijedu, broju i vrstama argumenata. Općenito se naziva i preopterećenjem metode.
Preopterećenje metode u Javi
Preopterećenje metoda je provedba polimorfizma vremena kompajliranja u Javi. Kada imamo jednu ili više metoda s istim imenom i / ili vrstama povratka, ali različitim popisima parametara, tada kažemo da smo metode 'preopteretili'.
Dakle, u datoj klasi možemo imati razne metode s istim imenom, ali različite liste argumenata.
Kako se pozivamo na preopterećene metode? Ili kako kompajler zna koju će metodu pozvati?
Pozivanje točne metode koja odgovara pozivu izvodi se ovisno o popisu parametara.
Već smo vidjeli da klasa u Javi može imati više konstruktora. U slučaju konstruktora, popis argumenata ili argumenata koje konstruktor prihvaća različit je u svim konstruktorima. Ovo je primjer preopterećenja. Dakle, preopterećenje konstruktora osnovni je oblik preopterećenja metoda u Javi.
Sada da vidimo kako preopteretiti metodu u Javi?
Java nudi tri načina preopterećenja metoda, ovisno o varijacijama na popisu parametara / argumenata.
# 1) Vrsta parametara
Možemo preopteretiti metode u Javi, ovisno o vrsti podataka parametara.
Razmotrimo sljedeći primjer u kojem smo dali prototipove tri metode.
zbrajanje (int, int);
zbrajanje (int, float);
dodatak (String, String);
Kao što se vidi odozgo, imamo isto ime metode u sva tri slučaja i isti broj parametara, ali svaki poziv metode ima različite vrste parametara.
Dakle, sve dok metode imaju različite vrste parametara, možemo reći da su metode preopterećene. Kada pozivamo metodu, sastavljač odlučuje o vrsti podataka parametra, a ovisno o vrsti podataka popisa parametara koja se pruža uz poziv metode, poziva se odgovarajuća metoda.
Na primjer,ako imamo poziv metode kao u nastavku:
zbrajanje (3, 3,5);
U gornjem pozivu metode možemo vidjeti da je prvi parametar int tipa, dok je drugi parametar float. Kada se susretne gornji poziv, kompajler rješava popis parametara, a zatim poziva odgovarajuću metodu koja je druga gornja metoda.
Sada ćemo implementirati cjeloviti Java program kako bismo demonstrirali preopterećenje metode na temelju tipova podataka parametara.
class MethodOverload { //overloaded method - char parameter public void printParam(char ch) { System.out.println('Input character:' + ch); } //overloaded method - int parameter public void printParam(int num) { System.out.println('Input Number:' + num); } } class Main { public static void main(String args()) { MethodOverload obj = new MethodOverload(); obj.printParam('A'); //call overloaded method (char ) obj.printParam(10); //call overloaded method (int ) } } Izlaz:

# 2) Broj parametara
Druga implementacija preopterećenja metode je preopterećenjem metoda s različitim brojem parametara u pozivu funkcije.
Na primjer,uzmimo u obzir sljedeće deklaracije metoda:
addnum (int, int);
addnum (int, int, int);
U gornjim deklaracijama metode, prva deklaracija metode ima dva parametra, a druga deklaracija ima tri parametra. Kad se funkcija pozove, kompajler pregledava broj parametara, a zatim na odgovarajući način rješava poziv metode.
Sljedeći primjer prikazuje program koji koristi preopterećenje metode na temelju broja parametara.
class MethodOverload { //overloaded method - 1 parameter public void printParam(char ch) { System.out.println(ch); } //overloaded method - 2 parameters public void printParam(char ch, int num) { System.out.println('Character: ' + ch + ' ; '+ 'Number:' +num); } } class Main { public static void main(String args()) { MethodOverload obj = new MethodOverload(); obj.printParam('A'); //call overloaded method (1 ) obj.printParam('A',10); //call overloaded method (2 ) } } Izlaz:

U ovom primjeru imamo dvije metode preopterećene na temelju broja parametara. Prva metoda uzima jedan parametar, a druga metoda uzima dva parametra. U glavnoj metodi nazivamo obje metode jednu za drugom, a prevodilac rješava poziv funkcije ovisno o broju zadanih parametara.
# 3) Slijed parametara
Treći pristup provedbe preopterećenja metoda temelji se na slijedu parametara u preopterećenim metodama.
najbolji mobitel špijunski softver za iphone -
Razmotrimo sljedeći primjer deklaracije metode,
zbroj (int, plutajuće);
zbroj (float, int);
Ovdje imamo preopterećeni zbroj metode. U prvoj su deklaraciji parametri int i float. U drugoj deklaraciji, parametri su int i float, ali njihov redoslijed na popisu parametara se mijenja.
Sada se parametar float pojavljuje prvi, dok je parametar int drugi. Preopterećenje metode možemo postići promjenom redoslijeda parametara.
The ispod to pokazuje program Java.
class MethodOverload { //overloaded method - char,int parameter public void printParam(char ch, int num) { System.out.println('Input character:' + ch + ' ; ' + 'Input Number:' + num); } //overloaded method - int,char parameter public void printParam(int num, char ch) { System.out.println('Input Number:' + num + ' ; ' + 'Input Character:' + ch); } } class Main { public static void main(String args()) { MethodOverload obj = new MethodOverload(); obj.printParam('A', 100); //call overloaded method (char,int) obj.printParam(100, 'A'); //call overloaded method (int,char) } } Izlaz:

U gore navedenom programu imamo printParam preopterećenu metodu koja ima int i char parametre čiji se redoslijed mijenja u dvije deklaracije metode.
Nevaljani slučajevi preopterećenja metode
Do sada smo razgovarali o preopterećenju metode pomoću popisa parametara. Još nismo razmatrali metodu povratka. Imajte na umu da ne preopterećujemo metode temeljene na vrstama povrata.
Na primjer, ako dvije metode imaju isto ime i isti popis parametara, ali različite vrste povratka, onda ne kažemo da su ove dvije metode preopterećene. Ovaj slučaj postaje nevaljan zbog preopterećenja.
Dakle, ako imamo sljedeće deklaracije:
Ja int (int, int);
Zbroj niza (int, int);
U tom će slučaju prevoditelj izdati pogrešku jer dvije metode nisu preopterećene. Stoga se metode koje se temelje isključivo na vrstama povrata ne razlikuju.
Pokažimo ovaj nevaljani slučaj pomoću Java programa.
class OverloadDemo { public double myMethod(int num1, int num2) { System.out.println('OverloadDemo::myMethod returns double'); return num1+num2; } public int myMethod(int var1, int var2) { System.out.println('OverloadDemo::myMethod returns int'); return var1-var2; } } class Main { public static void main(String args()) { OverloadDemo obj2= new OverloadDemo(); obj2.myMethod(10,10); obj2.myMethod(20,12); } } U gornjem programu, metoda myMethod ima dva prototipa. Jedan prototip uzima dva int parametra i vraća dvostruko. Prototip druge metode uzima dva int parametra i vraća int.
Dakle, kada kompajliramo ovaj program, dobit ćemo donji rezultat.
Izlaz:

Gornja pogreška kompilacije ukazuje na to da je metoda deklarirana dva puta. To znači da kompajler ne smatra ove metode preopterećenima samo na temelju tipa return.
Preopterećenje operatera
Preopterećenje operatora mehanizam je preopterećenja u kojem se postojećem operatoru daje različito značenje.
Kao što smo raspravljali u uvodnom odjeljku ovog vodiča, operator sabiranja ‘+’ klasičan je primjer preopterećenja operatora.
Kad su operandi ovog operatora numerički, tada + operator vraća ukupno dvije vrijednosti. Ali kada su operandi tipa String, tada je rezultat operacije zbrajanja spojeni niz. Imajte na umu da u Javi možemo preopteretiti samo operator + (dodavanje).
Ovaj operater obavlja dvije funkcije:
- Dodavanje cijelih brojeva ili numeričkih vrijednosti.
- Spajanje nizova
Stoga je podrška za preopterećenje operatora ograničena u Javi za razliku od C ++ gdje možemo preopteretiti gotovo sve operatore koji imaju nekoliko poput sizeof, dot operator itd.
Program u nastavku pokazuje preopterećenje operatora u Javi.
class OperatorOverload { //overloaded method for concatenating two strings void operator(String str1, String str2) { String resultStr = str1 + str2; System.out.println('Concatenated String: ' + resultStr); } //overloaded method for adding two numbers void operator(int num1, int num2) { int result = num1 + num2; System.out.println('Sum of two numbers : ' + result); } } class Main { public static void main(String() args) { OperatorOverload obj = new OperatorOverload(); obj.operator(10, 15); //add two numbers obj.operator('Hello ', 'World!!'); //concatenate two strings } } Izlaz:

U gore navedenom programu preopteretili smo operator ‘+’. Kad proslijedimo dvije cjelovite vrijednosti preopterećenoj metodi, vraća se zbroj dviju cijelih brojeva, a kada se proslijede dva niza, rezultat je ujedinjeni niz.
Treba napomenuti određene točke u vezi s preopterećenjem i polimorfizmom tijekom kompajliranja.
- Preopterećenje metoda način je na koji se primjenjuje polimorfizam vremena prevođenja koji je poznat i kao statički polimorfizam.
- Statički polimorfizam poznat je i kao rano vezanje ili vezivanje tijekom vremena kompajliranja.
- Kako se vezanje parametara i poziva funkcije događa u vrijeme prevođenja, preopterećenje se naziva vezivanjem vremena prevođenja.
- U Javi možemo preopteretiti samo operator ‘+’ i on vrši zbrajanje dviju cijelih brojeva ili spajanje dviju žica.
Često postavljana pitanja
P # 1) Zašto nam je potreban polimorfizam u Javi?
Odgovor: Polimorfizam nam omogućuje mnogo implementacija za jedan objekt. Preopterećenjem metoda ne trebamo imati previše metoda s različitim imenima koja je teško zapamtiti. Umjesto toga možemo imati preopterećene metode tako da možemo imati jasnu implementaciju metoda koje izvode slične funkcije.
Također nadjačavanje pomagala u pravilnoj provedbi nasljeđivanja što nam omogućuje da na lakši način dodamo više funkcionalnosti postojećim klasama.
P # 2) Što je polimorfizam OOP?
Odgovor: Definicija polimorfizma objektno orijentiranog programiranja odnosi se na sposobnost programskih jezika da implementiraju jedan objekt u različitim oblicima. Polimorfizam se također definira kao sposobnost programa da nadjača metode iz roditeljske klase u izvedenu klasu kako bi imao dodatnu funkcionalnost.
P # 3) Možemo li preopteretiti i nadjačati glavnu metodu?
Odgovor: Ne. Ne možemo nadjačati statičku glavnu metodu. Iako možemo preopteretiti glavnu metodu, JVM nikada neće nazvati preopterećenu glavnu metodu. Stoga je najbolji odgovor ne preopteretiti ili nadjačati glavnu metodu.
P # 4) Mogu li se konstruktori preopteretiti?
Odgovor: Da, možemo preopteretiti konstruktore u Javi na isti način kao i Java metode. Konstruktori obično imaju isto ime, ali različit broj argumenata.
P # 5) Zašto je preopterećenje metoda korisno?
Odgovor: Možemo napisati čisti kôd koristeći preopterećenje metoda, a on također postaje čitljiv jer imamo metode s istim imenom. Dakle, ako implementiramo funkcionalnost za različite vrste podataka, tada možemo preopteretiti metode i bit će lakše razdvojiti kod.
Zaključak
Polimorfizam u Javi znači da objekt može imati više oblika. Polimorfizam u Javi ima dvije vrste, tj. Polimorfizam kompilacije i polimorfizam vremena izvođenja. Polimorfizam kompajliranja vrši se u vrijeme kompajliranja. Polimorfizam kompajliranog vremena statičan je i implementiran je preopterećenjem metode i operativnim preopterećenjem.
Izvršni polimorfizam izvodi se za vrijeme izvođenja i dinamičan je. Provodi se korištenjem nadjačavanja metode.
U ovom uputstvu vidjeli smo načine za provođenje preopterećenja metoda. Također smo detaljno razgovarali o preopterećenju operatera. Java podržava preopterećenje samo operatora ‘+’.
=> Pročitajte seriju Easy Java Training.
Preporučena literatura
- Java String sadrži () Vodič za metode s primjerima
- Duljina Java niza () Metoda s primjerima
- Metoda Java podniz () - Vodič s primjerima
- Vodič za Java Float s primjerima programiranja
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- TreeMap u Javi - Vodič uz primjere Java TreeMap
- Java String Vodič | Metode Java niza s primjerima
- Dvostruki vodič za Java s primjerima programiranja