what is polymorphism java tutorial with examples
Ta vadnica pojasnjuje, kaj je polimorfizem v Javi, vrste polimorfizma in kako uporabiti polimorfizem v času prevajanja s primeri:
Beseda 'polimorfizem' izhaja iz dveh besed, tj. 'Poly' kar pomeni veliko in ' morf ”Pomenske oblike. Polimorfizem torej pomeni številne oblike. V programskem jeziku lahko rečemo, da ima objekt lahko različne oblike, zato je objekt polimorfen.
Polimorfizem je ena najpomembnejših lastnosti OOP in nam omogoča, da funkcijo (predmet ali sporočilo ali metodo ali operater) izrazimo v različnih oblikah.
=> Tukaj si oglejte Vodnik za začetnike Java.
Kaj se boste naučili:
Uvod v polimorfizem v Javi
Polimorfna entiteta se v različnih scenarijih obnaša drugače.
Na primer, razmislite o operatorju '+' (dodatek) v Javi. To je binarni operator in ima dva operanda. Ko so operandi, ki se posredujejo operaterju '+, številke, se izvede operacija seštevanja, ki vrne vsoto dveh števil.
Ko se operandi spremenijo v vrsto String, operator ‘+’ ne doda predmetov String, temveč združi ali združi vsebino niza, da tvori nastali tretji niz.
Na primer, če ' eno 'In' dva 'So vsebina dveh String predmetov 'Ena' + 'dve' bo privedlo do onetwo '. To je združitev.
vprašanja za intervju o milu in počitku
V Javi so vsi predmeti polimorfni, saj vsi izhajajo iz razreda 'Object' in tako izpolnjujejo razmerje 'IS-A' z razredom Object.
Do predmeta je vedno mogoče dostopati prek referenčne spremenljivke določenega tipa razreda. Ko je referenčna spremenljivka določenega tipa razglašena, je ni mogoče spremeniti. Če pa referenčna spremenljivka ni deklarirana kot „Končna“, jo lahko dodelimo tako, da kaže na druge predmete.
Tip tega sklica na objekt bo določil metode razreda ali funkcije, ki jih je treba poklicati.
Na primer,če obstajata razred ABC in razred XYZ, ki izhajata iz ABC, imata oba razreda polimorfno metodo func ().
class ABC{ void func(){} } class XYZ extends ABC{ void func() {} }
Ustvarimo referenco tipa ABC.
obj = new XYZ ();
Zdaj, ko prikličemo metodo func (), ker je objekt, na katerega kaže obj, razreda XYZ, bo uporabljena metoda func () iz razreda XYZ.
Kot smo videli v zgornjem primeru, ima metoda func () različne izvedbe, vendar isti prototip. Glede na predmet, ki ga kaže referenčni objekt, imamo v tem scenariju poklicano ustrezno izvedbo. To je polimorfizem.
Podrobno se pogovorimo o polimorfizmu v Javi.
Primer polimorfizma Java
Razumejmo preprost primer polimorfizma v Javi z operacijo dodajanja, kot smo že omenili.
Tu uporabljamo dve metodi z istim imenom, vendar z različnimi parametri. Prva funkcija sprejme dva celoštevilčna parametra, druga metoda pa dva nizovna parametra.
Glede na vrsto posredovanih parametrov se pokliče ustrezna metoda, ki doda dve celi števili in natisne rezultat ali združi dva niza in izpiše nastali niz.
Program Java je podan spodaj:
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 } }
Izhod:
Tu smo videli, da ko prvič posredujemo dva celoštevilna parametra add_func, se pokliče prva metoda. V drugem klicu funkcije prenesemo dva parametra tipa String, zato se pokliče druga preobremenjena metoda.
Vrste polimorfizma
Java podpira dve vrsti polimorfizma:
- Prekomorni polimorfizem
- Polimorfizem med izvajanjem
Kot že ime pove, se polimorfizem časa prevajanja izvaja v času prevajanja, polimorfizem med izvajanjem pa med izvajanjem.
Kot je prikazano na zgornji sliki, se polimorfizem prevajanja izvaja s preobremenitvijo. Preobremenimo lahko bodisi metodo bodisi operaterja. Polimorfizem med izvajanjem je dosežen z razveljavitvijo.
V tej vadnici bomo podrobno razpravljali o polimorfizmu prevajanja. Polimorfizem med izvajanjem bomo obravnavali v naslednji vadnici.
Čas polimorfizma v prevajanju v Javi
Polimorfizem v času prevajanja je znan tudi kot 'statični polimorfizem'. Kot del polimorfizma v času prevajanja se kateri koli polimorfizem izvede v času prevajanja.
V Javi se polimorfizem časa prevajanja izvaja z uporabo » Preobremenitev metode '. Z uporabo preobremenitve metode imamo lahko eno ali več metod z istim imenom, ki se razlikujejo le po številu ali vrsti ali vrstnem redu parametrov.
Preobremenitev metode je najpogostejša izvedba polimorfizma časa prevajanja v Javi. Java podpira tudi preobremenitev operaterja.
Kaj je na splošno preobremenitev v Javi?
Preobremenitev v Javi je postopek, ki vsebuje več kot eno metodo z istim imenom in vrnjenim tipom, vendar se razlikuje glede na zaporedje, število in vrste argumentov. Na splošno se imenuje tudi preobremenitev metode.
Preobremenitev metode v Javi
Preobremenitev metode je izvedba polimorfizma časa prevajanja v Javi. Če imamo eno ali več metod z istim imenom in / ali vrnjenimi vrstami, vendar različnimi seznami parametrov, potem rečemo, da smo metode »preobremenili«.
Torej imamo lahko v danem razredu različne metode z istim imenom, vendar z različnimi seznami argumentov.
Kako prikličemo preobremenjene metode? Ali kako prevajalnik ve, katero metodo je treba poklicati?
Priklic natančne metode, ki ustreza klicu, se izvede glede na seznam parametrov.
Že smo videli, da ima lahko razred v Javi več konstruktorjev. V primeru konstruktorjev je seznam argumentov ali argumentov, ki jih konstruktor sprejme, v vseh konstruktorjih drugačen. To je primer preobremenitve. Torej je preobremenitev konstruktorja osnovna oblika preobremenitve metode v Javi.
Zdaj pa poglejmo, kako preobremeniti metodo v Javi?
Java ponuja tri načine preobremenitve metode, odvisno od sprememb na seznamu parametrov / argumentov.
# 1) Vrsta parametrov
V Javi lahko preobremenimo metode, odvisno od vrste podatkovnih parametrov.
Upoštevajte naslednji primer, v katerem smo podali prototipe treh metod.
seštevanje (int, int);
seštevanje (int, float);
dodatek (String, String);
Kot je razvidno od zgoraj, imamo v vseh treh primerih enako ime metode in enako število parametrov, vendar ima vsak klic metode različne vrste parametrov.
Dokler imajo metode različne vrste parametrov, lahko rečemo, da so metode preobremenjene. Ko prikličemo metodo, se prevajalnik odloči za podatkovni tip parametra in glede na podatkovni tip seznama parametrov, ki je priložen klicu metode, se pokliče ustrezna metoda.
Na primer,če imamo klic metode, kot je spodaj:
dodatek (3, 3,5);
V zgornjem klicu metode lahko vidimo, da je prvi parameter int tipa, drugi pa float. Ko pride do zgornjega klica, prevajalnik razreši seznam parametrov in nato prikliče ustrezno metodo, ki je druga zgoraj navedena metoda.
Zdaj pa izvedimo celoten program Java, da dokažemo preobremenitev metode na podlagi podatkovnih vrst parametrov.
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 ) } }
Izhod:
# 2) Število parametrov
Druga izvedba preobremenitve metode je s preobremenitvijo metod z različnim številom parametrov v klicu funkcije.
Na primer,upoštevajmo naslednje izjave o metodah:
addnum (int, int);
addnum (int, int, int);
V zgornjih izjavah o metodah ima prva izjava metode dva parametra, druga pa tri parametre. Ko se prikliče funkcija, prevajalnik pregleda število parametrov in nato ustrezno razreši klic metode.
Spodnji primer prikazuje program, ki uporablja preobremenitev metode glede na število parametrov.
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 ) } }
Izhod:
V tem primeru imamo dve metodi preobremenjeni glede na število parametrov. Prva metoda ima en parameter, druga metoda pa dva parametra. V glavni metodi pokličeva obe metodi eno za drugo in prevajalnik razreši klic funkcije, odvisno od števila podanih parametrov.
# 3) Zaporedje parametrov
Tretji pristop izvajanja preobremenitve metode temelji na zaporedju parametrov v preobremenjenih metodah.
Upoštevajte naslednji primer deklaracije metode,
vsota (int, float);
vsota (float, int);
Tu imamo preobremenjeno vsoto metode. V prvi deklaraciji sta parametra int in float. Tudi v drugi deklaraciji sta parametra int in float, vendar se njihov vrstni red na seznamu parametrov spremeni.
Zdaj se parameter float prikaže prvi, medtem ko je parameter int drugi. Preobremenitev metode lahko dosežemo s spreminjanjem vrstnega reda parametrov.
The spodaj to dokazuje 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) } }
Izhod:
V zgornjem programu imamo preobremenjeno metodo printParam, ki ima parametre int in char, katerih vrstni red se spremeni v dveh deklaracijah metode.
Neveljavni primeri preobremenitve metode
Do sedaj smo razpravljali o preobremenitvi metode s pomočjo seznama parametrov. Vrnilne metode še nismo upoštevali. Upoštevajte, da metod ne preobremenjujemo na podlagi vrst vrnitve.
Če imata na primer dve metodi isto ime in enake sezname parametrov, vendar različna tipa vrnitve, potem ne rečemo, da sta ti dve metodi preobremenjeni. Ta primer postane neveljaven zaradi preobremenitve.
Torej, če imamo naslednje izjave:
Jaz int (int, int);
Vsota niza (int, int);
V tem primeru bo prevajalnik izdal napako, saj dve metodi nista preobremenjeni. Metode se torej ne razlikujejo le na podlagi vrst vrnitve.
Pokažimo ta neveljaven primer s programom Java.
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); } }
V zgornjem programu ima metoda myMethod dva prototipa. En prototip vzame dva int parametra in vrne dvojno. Prototip druge metode vzame dva int parametra in vrne int.
Torej, ko prevedemo ta program, dobimo spodnji rezultat.
Izhod:
Zgornja napaka prevajanja kaže, da je metoda deklarirana dvakrat. To pomeni, da prevajalnik teh metod ne šteje za preobremenjene zgolj glede na vrsto vrnitve.
Preobremenitev operaterja
Preobremenitev operaterja je mehanizem preobremenitve, pri katerem obstoječi operater dobi drugačen pomen.
Kot smo že razpravljali v uvodnem delu te vadnice, je operator dodajanja ‘+’ klasičen primer preobremenitve operaterja.
Ko so operandi tega operaterja številčni, potem operator + vrne skupno dve vrednosti. Ko pa so operandi tipa String, je rezultat operacije seštevanja združeni niz. Upoštevajte, da lahko v Javi preobremenimo samo operator + (dodatek).
Ta operater opravlja dve funkciji:
- Dodajanje celih števil ali številskih vrednosti.
- Združevanje nizov
Zato je podpora za preobremenitev operaterja v Javi omejena, za razliko od C ++, kjer lahko preobremenimo skoraj vse operaterje, ki imajo nekaj takšnih, kot so sizeof, dot operator itd.
Spodnji program prikazuje preobremenitev operaterja v 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 } }
Izhod:
V zgornjem programu smo preobremenili operater ‘+’. Ko preobremenjeni metodi posredujemo dve celoštevilčni vrednosti, se vrne vsota dveh celih števil in ko se preneseta dva niza, je rezultat združeni niz.
Treba je opozoriti na nekatere točke glede preobremenitve in polimorfizma v času prevajanja.
- Preobremenitev metode je način za izvajanje polimorfizma v času prevajanja, ki je znan tudi kot statični polimorfizem.
- Statični polimorfizem je znan tudi kot zgodnja vezava ali vezava v času prevajanja.
- Ker se vezava parametrov in klic funkcije zgodi v času prevajanja, se preobremenitev imenuje vezava časa prevajanja.
- V Javi lahko preobremenimo samo operator ‘+’ in izvede dodajanje dveh celih števil ali združevanje dveh nizov.
Pogosto zastavljena vprašanja
V # 1) Zakaj potrebujemo polimorfizem v Javi?
Odgovor: Polimorfizem nam omogoča veliko izvedb enega predmeta. Zaradi preobremenitve metod nam ni treba imeti preveč metod z različnimi imeni, ki si jih je težko zapomniti. Namesto tega imamo lahko preobremenjene metode, da bomo lahko jasno izvajali metode, ki izvajajo podobne funkcije.
Tudi prednostni pripomočki pri pravilni izvedbi dedovanja, ki nam omogočajo, da obstoječim razredom na enostavnejši način dodamo več funkcionalnosti.
V # 2) Kaj je polimorfizem OOP?
Odgovor: Objektno usmerjena programska definicija polimorfizma se nanaša na sposobnost programskih jezikov, da izvajajo en objekt v različnih oblikah. Polimorfizem je opredeljen tudi kot zmožnost programa, da preglasi metode iz nadrejenega razreda v izpeljani razred, da ima dodatne funkcije.
V # 3) Ali lahko preobremenimo in preglasimo glavno metodo?
Odgovor: Ne. Ne moremo preglasiti statične glavne metode. Čeprav lahko preobremenimo glavno metodo, JVM nikoli ne bo poklical preobremenjene glavne metode. Najboljši odgovor je torej, da ne preobremenimo ali preglasimo glavne metode.
notranje združiti zunanje združiti levo združiti desno združiti
V # 4) Ali je mogoče konstruktorje preobremeniti?
Odgovor: Da, konstruktorje v Javi lahko preobremenimo na enak način kot metode Java. Konstruktorji imajo običajno isto ime, a različno število argumentov.
V # 5) Zakaj je preobremenitev metode koristna?
Odgovor: Čisto kodo lahko napišemo s preobremenitvijo metode in postane tudi berljiva, saj imamo metode z istim imenom. Torej, če izvajamo funkcionalnost za različne vrste podatkov, potem lahko metode preobremenimo in lažje bomo ločili kodo.
Zaključek
Polimorfizem v Javi pomeni, da ima objekt lahko različne oblike. Polimorfizem v Javi ima dve vrsti, to je polimorfizem v času prevajanja in polimorfizem med izvajanjem. Polimorfizem prevajanja poteka v času prevajanja. Polimorfizem prevajalskega časa je statičen in se izvaja s preobremenitvijo metode in preobremenitvijo operaterja.
Polimorfizem med izvajanjem se izvaja med izvajanjem in je dinamičen. Izvaja se z uporabo preglasitve metode.
V tej vadnici smo videli načine za izvajanje preobremenitve metode. Podrobno smo razpravljali tudi o preobremenitvi operaterja. Java podpira preobremenitev samo operaterja '+'.
=> Preberite serijo Easy Java Training Series.
Priporočeno branje
- Java String vsebuje () Vadnico metode s primeri
- Dolžina niza Java () Metoda s primeri
- Metoda Java substring () - Vadnica s primeri
- Vadnica Java Float s primeri programiranja
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- TreeMap v Javi - Vadnica z primeri Java TreeMap
- Vadnica za Java String | Nizovske metode Java s primeri
- Dvojna vadnica Java s primeri programiranja