Polimorfizem Java (z primeri)

V tej vadnici bomo s pomočjo primerov spoznali polimorfizem Java in njegovo izvajanje.

Polimorfizem je pomemben koncept objektno usmerjenega programiranja. Preprosto pomeni več oblik.

To pomeni, da lahko ista entiteta (metoda ali operater ali objekt) izvaja različne operacije v različnih scenarijih.

Primer: Java polimorfizem

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

Izhod

 Oblika kvadrata … Krog upodabljanja … 

V zgornjem primeru smo ustvarili nadrazred: Mnogokotnik in dva podrazreda: Kvadrat in Krog. Opazite uporabo render()metode.

Glavni namen render()metode je upodabljanje oblike. Vendar se postopek upodabljanja kvadrata razlikuje od postopka upodabljanja kroga.

Zato se render()metoda v različnih razredih obnaša različno. Lahko pa rečemo, da render()je polimorfna.

Zakaj polimorfizem?

Polimorfizem nam omogoča, da ustvarimo dosledno kodo. V prejšnjem primeru lahko ustvarimo tudi različne metode: renderSquare()in renderCircle()za upodabljanje kvadrata oziroma kroga.

To bo delovalo popolnoma. Vendar pa moramo za vsako obliko ustvariti različne metode. Naša koda bo neskladna.

Da bi to rešili, nam polimorfizem v Java omogoča, da ustvarimo eno samo metodo, render()ki se bo obnašala drugače za različne oblike.

Opomba : print()Metoda je tudi primer polimorfizma. To se uporablja za tiskanje vrednosti različnih vrst všeč char, int, string, itd

Polimorfizem v Javi lahko dosežemo na naslednje načine:

  1. Preglasitev metode
  2. Preobremenitev metode
  3. Preobremenitev operaterja

Preglasitev metode Java

Med dedovanjem v Javi, če je enaka metoda prisotna tako v superrazredu kot v podrazredu. Nato metoda v podrazredu preglasi isto metodo v nadrazredu. To se imenuje preglasitev metode.

V tem primeru bo ista metoda izvedla eno operacijo v superrazredu in drugo operacijo v podrazredu. Na primer

Primer 1: Polimorfizem z uporabo preglasitve metode

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

Izhod :

 Programski jezik Java Skupni angleški jezik

V zgornjem primeru smo ustvarili nadrazred z imenom Jezik in podrazred z imenom Java. Tu je metoda displayInfo()prisotna tako v jeziku kot v Javi.

Uporaba displayInfo()je za tiskanje informacij. Vendar tiska različne informacije v jeziku in jeziku Java.

Na podlagi predmeta, ki se uporablja za klicanje metode, se natisnejo ustrezne informacije.

Delovanje polimorfizma Java

Opomba : Klicana metoda se določi med izvajanjem programa. Zato je preglasitev metode polimorfizem med izvajanjem .

2. Preobremenitev Java metode

V razredu Java lahko ustvarimo metode z istim imenom, če se razlikujejo po parametrih. Na primer

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

To je v Javi znano kot preobremenitev metode. Tu bo ista metoda izvajala različne operacije na podlagi parametra.

Primer 3: Polimorfizem z uporabo preobremenitve metode

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

Izhod :

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

V zgornjem primeru smo ustvarili razred z imenom Pattern. Razred vsebuje metodo z imenom, display()ki je preobremenjena.

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

Tu je glavna naloga display()tiskanje vzorca. Vendar pa metoda na podlagi posredovanih argumentov izvaja različne operacije:

  • natisne vzorec *, če ni poslan noben argument oz
  • natisne vzorec parametra, če charje posredovan argument enega tipa.

Opomba : Klicano metodo določi prevajalnik. Zato je znan tudi kot polimorfizem v času prevajanja.

3. Preobremenitev operaterja Java

Nekateri operaterji v Javi se obnašajo različno z različnimi operandi. Na primer

  • + je preobremenjen za izvedbo številskega seštevanja in združevanja nizov in
  • operaterji, kot &so |, in !so preobremenjeni za logične in bitne operacije.

Poglejmo, kako lahko s preobremenitvijo operaterja dosežemo polimorfizem.

+Operater se uporablja za dodajanje dveh entitet. Vendar pa v Javi +operater izvede dve operaciji.

1. Kadar +se uporablja s števili (cela števila in števila s plavajočo vejico), izvede matematično seštevanje. Na primer

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

2. Ko uporabimo +operator z nizi, bo izvedel združevanje nizov (združil dva niza). Na primer

 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.

V zgornjem primeru smo ustvarili objektno spremenljivko pl razreda ProgrammingLanguage. Tu je pl polimorfna spremenljivka. To je zato, ker,

  • V izjavi pl = new ProgrammingLanguage()se pl sklicuje na objekt razreda ProgrammingLanguage.
  • In v izjavi pl = new Java()pl se nanaša na predmet razreda Java.

To je primer nadgradnje v Javi.

Zanimive Članki...