Java polimorfisms (ar piemēriem)

Šajā apmācībā mēs ar piemēru palīdzību uzzināsim par Java polimorfismu un tā ieviešanu.

Polimorfisms ir svarīgs objektorientētas programmēšanas jēdziens. Tas vienkārši nozīmē vairāk nekā vienu formu.

Tas ir, viena un tā pati vienība (metode vai operators vai objekts) dažādos scenārijos var veikt dažādas darbības.

Piemērs: Java polimorfisms

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

Rezultāts

 Atveido kvadrātu … renderē apli … 

Iepriekš minētajā piemērā mēs esam izveidojuši superklasi: daudzstūri un divas apakšklases: kvadrāts un aplis. Ievērojiet render()metodes izmantošanu.

Metodes galvenais mērķis render()ir formas atveidošana. Tomēr kvadrāta renderēšanas process atšķiras no apļa renderēšanas.

Tādējādi render()metode dažādās klasēs izturas atšķirīgi. Vai arī mēs varam teikt, ka tas render()ir polimorfs.

Kāpēc polimorfisms?

Polimorfisms ļauj mums izveidot konsekventu kodu. Iepriekšējā piemērā mēs varam arī izveidot dažādas metodes: renderSquare()un renderCircle()attiecīgi padarīt kvadrātu un apli.

Tas darbosies nevainojami. Tomēr katrai formai mums ir jāizveido dažādas metodes. Tas padarīs mūsu kodu pretrunīgu.

Lai to atrisinātu, Java polimorfisms ļauj mums izveidot vienu metodi, render()kas dažādām formām izturēsies atšķirīgi.

Piezīme : Šī print()metode ir arī polimorfisma piemērs. Tas tiek izmantots, lai drukātu vērtības dažādu veidu, piemēram char, int, stringuc

Java polimorfismu mēs varam sasniegt, izmantojot šādus veidus:

  1. Metodes ignorēšana
  2. Metode Pārslodze
  3. Operatora pārslodze

Java metodes ignorēšana

Mantošanas laikā Java, ja viena un tā pati metode ir sastopama gan virsklasē, gan apakšklasē. Pēc tam apakšklases metode ignorē to pašu metodi superklasē. To sauc par metodes ignorēšanu.

Šajā gadījumā viena un tā pati metode veiks vienu darbību superklasē un citu darbību apakšklasē. Piemēram,

1. piemērs: polimorfisms, izmantojot metodes ignorēšanu

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

Izeja :

 Java programmēšanas valoda Kopējā angļu valoda

Iepriekš minētajā piemērā mēs esam izveidojuši superklasi ar nosaukumu Valoda un apakšklasi ar nosaukumu Java. Šeit metode displayInfo()ir gan valodā, gan Java.

To izmantošana displayInfo()ir izdrukāt informāciju. Tomēr tas drukā atšķirīgu informāciju valodās un Java.

Pamatojoties uz objekta izmantoto, lai izsauktu metodi, tiek izdrukāta atbilstošā informācija.

Java polimorfisma darbība

Piezīme : Izsauktā metode tiek noteikta programmas izpildes laikā. Tādējādi metodes ignorēšana ir izpildes laika polimorfisms .

2. Java metodes pārslodze

Java klasē mēs varam izveidot metodes ar tādu pašu nosaukumu, ja tās atšķiras pēc parametriem. Piemēram,

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

Tas ir pazīstams kā metodes pārslodze Java. Šeit viena un tā pati metode veiks dažādas darbības, pamatojoties uz parametru.

3. piemērs: polimorfisms, izmantojot metodes pārslodzi

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

Izeja :

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

Iepriekš minētajā piemērā mēs esam izveidojuši klasi ar nosaukumu Pattern. Klase satur metodi, kuras nosaukums display()ir pārslogota.

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

Šeit galvenā funkcija display()ir modeļa izdrukāšana. Tomēr, pamatojoties uz nodotajiem argumentiem, metode veic dažādas darbības:

  • izdrukā paraugu *, ja arguments nav nodots, vai
  • izdrukā parametra modeli, ja chartiek nodots viena tipa arguments.

Piezīme . Izsaukto metodi nosaka kompilators. Tādējādi to sauc arī par kompilācijas laika polimorfismu.

3. Java operatora pārslodze

Daži Java operatori ar dažādiem operandiem izturas atšķirīgi. Piemēram,

  • + operators ir pārslogots, lai veiktu ciparu pievienošanu, kā arī virkņu savienošanu, un
  • operatoriem patīk &, |un !ir pārslogoti loģiskām un bitu operācijām.

Apskatīsim, kā mēs varam sasniegt polimorfismu, izmantojot operatora pārslodzi.

+Operators tiek izmantots, lai pievienotu divas vienības. Tomēr Java valodā +operators veic divas darbības.

1. Ja +to lieto kopā ar skaitļiem (veseliem skaitļiem un peldošā komata skaitļiem), tas veic matemātisku papildinājumu. Piemēram,

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

2. Kad mēs izmantosim +operatoru ar virknēm, tas veiks virkņu savienošanu (savienos divas virknes). Piemēram,

 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.

Iepriekš minētajā piemērā mēs esam izveidojuši objekta mainīgo pl no klases ProgrammingLanguage. Šeit pl ir polimorfs mainīgais. Tas ir tāpēc, ka,

  • Paziņojumā pl = new ProgrammingLanguage()pl atsaucieties uz programmas ProgrammingLanguage objektu.
  • Paziņojumā pl = new Java()pl atsaucieties uz Java klases objektu.

Šis ir Java augšupielādes piemērs.

Interesanti raksti...