Java polümorfism (koos näidetega)

Selles õpetuses õpime näidete abil Java-polümorfismi ja selle rakendamist.

Polümorfism on objektorienteeritud programmeerimise oluline mõiste. See tähendab lihtsalt mitut vormi.

See tähendab, et sama üksus (meetod või operaator või objekt) võib erinevate stsenaariumide korral teha erinevaid toiminguid.

Näide: Java polümorfism

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

Väljund

 Ruudu renderdamine … Ringi renderdamine … 

Ülaltoodud näites oleme loonud superklassi: hulknurk ja kaks alaklassi: ruut ja ring. Pange tähele render()meetodi kasutamist.

Meetodi peamine eesmärk render()on kuju renderdamine. Ruudu renderdamise protsess erineb aga ringi renderdamise protsessist.

Seega render()käitub meetod erinevates klassides erinevalt. Või võime öelda, et see render()on polümorfne.

Miks just polümorfism?

Polümorfism võimaldab meil luua järjepideva koodi. Eelmises näites võime luua ka erinevaid meetodeid: renderSquare()ja renderCircle()vastavalt ruutude ja ringide renderdamiseks.

See töötab suurepäraselt. Kuid iga kuju jaoks peame looma erinevad meetodid. See muudab meie koodi vastuoluliseks.

Selle lahendamiseks võimaldab Java polümorfism luua ühe meetodi render(), mis käitub eri kujundite puhul erinevalt.

Märkus : print()meetod on ka näide polümorfismist. Seda kasutatakse printida väärtused erinevate meeldib char, int, stringjne

Saame Java-s polümorfismi saavutada järgmistel viisidel:

  1. Meetodi ülimuslikkus
  2. Meetod Ülekoormus
  3. Operaatori ülekoormus

Java-meetodi ülimuslikkus

Java-s pärimise ajal, kui sama meetod on olemas nii superklassis kui ka alaklassis. Seejärel alistab alaklassi meetod sama meetodi superklassis. Seda nimetatakse meetodi ületamiseks.

Sel juhul teeb sama meetod ühe toimingu superklassis ja teise toimingu alaklassis. Näiteks,

Näide 1: Polümorfism meetodi eiramise abil

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

Väljund :

 Java programmeerimiskeel ühine inglise keel

Ülaltoodud näites oleme loonud superklass nimega Keel ja alamklassi nimega Java. Siin on meetod displayInfo()olemas nii keeles kui ka Java keeles.

Kasutamine displayInfo()on teabe printimiseks. Kuid see trükib erinevat teavet keeles ja Java keeles.

Lähtudes meetodi kutsumiseks kasutatud objektist, trükitakse vastav teave.

Java polümorfismi töötamine

Märkus . Nimetatud meetod määratakse kindlaks programmi käivitamisel. Seega on meetodi eiramine tööaja polümorfism .

2. Java-meetodi ülekoormamine

Java klassis saame luua sama nimega meetodeid, kui need erinevad parameetrite poolest. Näiteks,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

Seda nimetatakse Java-s meetodi ülekoormamiseks. Siin teeb sama meetod parameetri põhjal erinevaid toiminguid.

Näide 3: Polümorfism meetodi ülekoormamise abil

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

Väljund :

 ********** ###########

Ülaltoodud näites oleme loonud klassi nimega Muster. Klass sisaldab nimega meetodit, display()mis on ülekoormatud.

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

Siin on peamiseks ülesandeks display()mustri printimine. Kuid edastatud argumentide põhjal teostab meetod erinevaid toiminguid:

  • prindib mustri *, kui argumenti ei edastata, või
  • prindib parameetri mustri, kui charedastatakse ühe tüübi argument.

Märkus . Nimetatud meetodi määrab kompilaator. Seega on see tuntud ka kui kompileerimisaja polümorfism.

3. Java-operaatori ülekoormus

Mõni Java-operaator käitub erinevate operandidega erinevalt. Näiteks,

  • + operaator on nii numbrilise liitmise kui ka stringide liitmise jaoks ülekoormatud ja
  • operaatorid meeldib &, |ja !on ülekoormatud loogiliste ja bitwise operatsioone.

Vaatame, kuidas operaatori ülekoormuse abil polümorfismi saavutada.

+Operaator kasutatakse lisada kaks üksust. Kuid Java-s teeb +operaator kaks toimingut.

1. Kui +seda kasutatakse koos arvudega (täis- ja ujukomaarvud), täidab see matemaatiliselt. Näiteks,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. Kui kasutame +operaatorit stringidega, teostab see stringide liitmise (ühendab kaks stringi). Näiteks,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

Ülaltoodud näites oleme loonud klassi ProgrammingLanguage objekti muutuja pl. Siin on pl polümorfne muutuja. See on sellepärast, et,

  • Avalduses pl = new ProgrammingLanguage()viitab pl ProgrammingLanguage klassi objektile.
  • Ja avalduses pl = new Java()viita pl Java klassi objektile.

See on näide Java-i ülekandmisest.

Huvitavad Artiklid...