Java polimorfizmas (su pavyzdžiais)

Šioje pamokoje pavyzdžių pagalba sužinosime apie „Java“ polimorfizmą ir jo įgyvendinimą.

Polimorfizmas yra svarbi objektinio programavimo samprata. Tai tiesiog reiškia daugiau nei vieną formą.

Tai yra, tas pats subjektas (metodas, operatorius ar objektas) gali atlikti skirtingas operacijas skirtingais scenarijais.

Pavyzdys: Java polimorfizmas

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

Rezultatas

 Pateikiama kvadratas … perteikiamas ratas … 

Ankstesniame pavyzdyje mes sukūrėme superklasę: daugiakampį ir du poklasius: kvadratą ir ratą. Atkreipkite dėmesį į render()metodo naudojimą.

Pagrindinis render()metodo tikslas yra pateikti formą. Tačiau kvadrato pateikimo procesas skiriasi nuo apskritimo pateikimo.

Vadinasi, render()metodas skirtingose ​​klasėse elgiasi skirtingai. Arba, galima sakyti, render()yra polimorfinis.

Kodėl būtent polimorfizmas?

Polimorfizmas leidžia mums sukurti nuoseklų kodą. Ankstesniame pavyzdyje taip pat galime sukurti skirtingus metodus: renderSquare()ir renderCircle()atitinkamai pateikti kvadratą ir ratą.

Tai veiks puikiai. Tačiau kiekvienai formai turime sukurti skirtingus metodus. Tai padarys mūsų kodą nenuoseklų.

Norėdami tai išspręsti, „Java“ polimorfizmas leidžia mums sukurti vieną metodą render(), kuris skirtingoms formoms elgsis skirtingai.

Pastaba : print()metodas taip pat yra polimorfizmo pavyzdys. Jis naudojamas spausdinti vertybes skirtingų tipų patinka char, int, string, ir tt

„Java“ polimorfizmą galime pasiekti šiais būdais:

  1. Metodas svarbesnis
  2. Metodas Perkrovimas
  3. Operatoriaus perkrova

„Java“ metodo nepaisymas

Paveldėjimo „Java“ metu, jei tas pats metodas yra ir superklasėje, ir poklasyje. Tada poklasio metodas pakeičia tą patį metodą superklase. Tai vadinama metodo viršijimu.

Tokiu atveju tas pats metodas atliks vieną operaciją superklase, o kitą - poklasyje. Pavyzdžiui,

1 pavyzdys: polimorfizmas naudojant svarbesnį metodą

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

Išvestis :

 „Java“ programavimo kalba Bendroji anglų kalba

Ankstesniame pavyzdyje mes sukūrėme superklasę pavadinimu Kalba ir poklasį pavadinimu „Java“. Čia metodas displayInfo()yra ir kalboje, ir „Java“.

Naudojimas displayInfo()yra informacijos spausdinimas. Tačiau tai spausdina skirtingą informaciją kalbomis ir „Java“.

Remiantis objektu, naudojamu metodo iškvietimui, atspausdinama atitinkama informacija.

Java polimorfizmo veikimas

Pastaba : Metodas, kuris yra vadinamas, nustatomas vykdant programą. Taigi metodo nepaisymas yra vykdymo laiko polimorfizmas .

2. „Java“ metodo perkrova

„Java“ klasėje mes galime sukurti metodus tuo pačiu pavadinimu, jei jie skiriasi parametrais. Pavyzdžiui,

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

Tai vadinama „Java“ metodo perkrova. Čia tas pats metodas atliks skirtingas operacijas pagal parametrą.

3 pavyzdys: polimorfizmas, naudojant metodo perkrovą

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

Išvestis :

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

Ankstesniame pavyzdyje mes sukūrėme klasę pavadinimu „Raštas“. Klasėje yra metodas, pavadintas, display()kuris yra perkrautas.

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

Čia pagrindinė funkcija display()yra spausdinti modelį. Tačiau, remiantis pateiktais argumentais, metodas atlieka skirtingas operacijas:

  • atspausdina šabloną *, jei nepateikiamas argumentas, arba
  • spausdina parametro šabloną, jei perduodamas vieno chartipo argumentas.

Pastaba : Vadinamąjį metodą nustato kompiliatorius. Taigi, jis taip pat žinomas kaip kompiliavimo laiko polimorfizmas.

3. „Java“ operatoriaus perkrova

Kai kurie „Java“ operatoriai su skirtingais operandais elgiasi skirtingai. Pavyzdžiui,

  • + operatorius perkrautas atlikti skaitinį papildymą, taip pat stygų sujungimą ir
  • operatoriai mėgsta &, |ir !yra perkrauti loginėms ir bitų operacijoms.

Pažiūrėkime, kaip galime pasiekti polimorfizmą, naudodamiesi operatoriaus perkrova.

+Operatorius naudojamas pridėti du subjektai. Tačiau „Java“ +operatorius atlieka dvi operacijas.

1. Kai +jis naudojamas su skaičiais (sveikaisiais ir slankiojo kablelio skaičiais), jis atlieka matematinį papildymą. Pavyzdžiui,

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

2. Kai naudosime +operatorių su eilutėmis, jis atliks eilučių sujungimą (sujungs dvi eilutes). Pavyzdžiui,

 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.

Ankstesniame pavyzdyje mes sukūrėme „ProgrammingLanguage“ klasės objektų kintamąjį pl. Čia pl yra polimorfinis kintamasis. Tai yra, nes,

  • Pareiškime pl = new ProgrammingLanguage()pl nurodykite „ProgrammingLanguage“ klasės objektą.
  • Pareiškime pl = new Java()pl nurodykite „Java“ klasės objektą.

Tai yra „Java“ pritaikymo srautui pavyzdys.

Įdomios straipsniai...