Java polimorfizam (s primjerima)

U ovom ćemo tutorijalu uz primjere naučiti o polimorfizmu Java i njegovoj provedbi.

Polimorfizam je važan koncept objektno orijentiranog programiranja. To jednostavno znači više oblika.

Odnosno, isti entitet (metoda ili operator ili objekt) može izvoditi različite operacije u različitim scenarijima.

Primjer: Java polimorfizam

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

Izlaz

 Renderiranje kvadrata … Renderiranje kruga … 

U gornjem primjeru stvorili smo superklasu: Poligon i dvije potklase: Kvadrat i Krug. Primijetite upotrebu render()metode.

Glavna svrha render()metode je prikazati oblik. Međutim, postupak prikazivanja kvadrata razlikuje se od postupka prikazivanja kruga.

Stoga se render()metoda različito ponaša u različitim klasama. Ili, možemo reći da render()je polimorfna.

Zašto polimorfizam?

Polimorfizam nam omogućuje stvaranje dosljednog koda. U prethodnom primjeru također možemo stvoriti različite metode: renderSquare()i renderCircle()za prikazivanje kvadrata, odnosno kruga.

Ovo će savršeno raditi. Međutim, za svaki oblik moramo stvoriti različite metode. To će naš kod učiniti nedosljednim.

Da bismo to riješili, polimorfizam u Javi omogućuje nam stvaranje jedne metode render()koja će se različito ponašati za različite oblike.

Napomena : print()Metoda je također primjer polimorfizma. To se koristi za ispis vrijednosti različitih tipova sviđa char, int, string, itd

Polimorfizam u Javi možemo postići na sljedeće načine:

  1. Nadjačavanje metode
  2. Preopterećenje metode
  3. Preopterećenje operatera

Nadjačavanje Java metode

Tijekom nasljeđivanja u Javi, ako je ista metoda prisutna i u superklasi i u podklasi. Zatim, metoda u podrazredu nadjačava istu metodu u nadrazredu. To se naziva nadjačavanje metode.

U ovom će slučaju ista metoda izvesti jednu operaciju u superrazredu, a drugu operaciju u podrazredu. Na primjer,

Primjer 1: Polimorfizam korištenjem metode nadjačavanja

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

Izlaz :

 Programski jezik Java Zajednički engleski jezik

U gornjem primjeru stvorili smo superrazred pod nazivom Jezik i podrazred pod nazivom Java. Ovdje je metoda displayInfo()prisutna i u jeziku i u jeziku Java.

Korištenje displayInfo()je ispis podataka. Međutim, ispisuje različite podatke na jeziku i na jeziku Java.

Na temelju predmeta koji se koristi za pozivanje metode, ispisuju se odgovarajuće informacije.

Djelovanje Java polimorfizma

Napomena : Metoda koja se poziva određuje se tijekom izvršavanja programa. Stoga je nadjačavanje metode polimorfizam vremena izvođenja .

2. Preopterećenje Java metode

U Java klasi možemo stvoriti metode s istim imenom ako se razlikuju u parametrima. Na primjer,

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

Ovo je poznato kao preopterećenje metoda u Javi. Ovdje će ista metoda izvoditi različite operacije na temelju parametra.

Primjer 3: Polimorfizam korištenjem metode preopterećenja

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

Izlaz :

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

U gornjem primjeru stvorili smo klasu pod nazivom Uzorak. Klasa sadrži metodu imenovanu display()koja je preopterećena.

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

Ovdje je glavna funkcija display()ispis uzorka. Međutim, na temelju proslijeđenih argumenata, metoda izvodi različite operacije:

  • ispisuje obrazac *, ako nijedan argument nije proslijeđen ili
  • ispisuje uzorak parametra ako charje proslijeđen argument jednog tipa.

Napomena : Metodu koja se poziva određuje prevodilac. Stoga je poznat i kao polimorfizam vremena kompajliranja.

3. Preopterećenje Java operatora

Neki se operateri u Javi različito ponašaju s različitim operandima. Na primjer,

  • + operator je preopterećen da izvrši numeričko zbrajanje kao i spajanje nizova, i
  • operateri poput &, |i !preopterećeni su za logičke i bitovne operacije.

Pogledajmo kako možemo postići polimorfizam pomoću preopterećenja operatora.

+Operator koristi za dodavanje dva entiteta. Međutim, na Javi +operater izvodi dvije operacije.

1. Kada +se koristi s brojevima (cijeli brojevi i brojevi s pomičnom zarezom), izvršava matematičko zbrajanje. Na primjer,

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

2. Kada koristimo +operator sa nizovima, on će izvršiti spajanje nizova (spojiti dva niza). Na primjer,

 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.

U gornjem primjeru stvorili smo objektnu varijablu pl klase ProgrammingLanguage. Ovdje je pl polimorfna varijabla. Ovo je zbog,

  • U izjavi pl = new ProgrammingLanguage(), pl se odnosi na objekt klase ProgrammingLanguage.
  • I, u izjavi pl = new Java(), pl se odnosi na objekt klase Java.

Ovo je primjer nadogradnje na Javi.

Zanimljivi članci...