Polymorfizmus Java (s príkladmi)

V tomto tutoriáli sa pomocou príkladov dozvieme o Java polymorfizme a jeho implementácii.

Polymorfizmus je dôležitý koncept objektovo orientovaného programovania. Znamená to jednoducho viac ako jednu formu.

To znamená, že rovnaká entita (metóda alebo operátor alebo objekt) môže vykonávať rôzne operácie v rôznych scenároch.

Príklad: Java polymorfizmus

 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ýkon

 Rendering Square … Rendering Circle … 

Vo vyššie uvedenom príklade sme vytvorili nadtriedu: Polygon a dve podtriedy: štvorec a kruh. Všimnite si použitie render()metódy.

Hlavným účelom render()metódy je vykreslenie tvaru. Proces vykreslenia štvorca je však iný ako proces vykreslenia kruhu.

Preto sa render()metóda v rôznych triedach správa odlišne. Alebo môžeme povedať, že render()je polymorfný.

Prečo polymorfizmus?

Polymorfizmus nám umožňuje vytvárať konzistentné kódy. V predchádzajúcom príklade môžeme tiež vytvoriť rôzne metódy: renderSquare()a renderCircle()vykresliť štvorec a kruh.

Toto bude fungovať perfektne. Pre každý tvar však musíme vytvoriť rôzne metódy. Náš kód bude nekonzistentný.

Aby sme to vyriešili, polymorfizmus v Jave nám umožňuje vytvoriť jedinú metódu, render()ktorá sa bude správať odlišne pre rôzne tvary.

Poznámka : print()Metóda je tiež príkladom polymorfizmu. Používa sa na tlač hodnôt rôznych typov rád char, int, stringatď

Polymorfizmus v Jave môžeme dosiahnuť nasledujúcimi spôsobmi:

  1. Prepísanie metódy
  2. Metóda preťaženia
  3. Preťaženie operátora

Prepísanie metódy Java

Počas dedenia v Jave, ak je rovnaká metóda prítomná v nadtriede aj v podtriede. Potom metóda v podtriede prepíše rovnakú metódu v nadtriede. Toto sa nazýva prepísanie metódy.

V tomto prípade rovnaká metóda vykoná jednu operáciu v nadtriede a ďalšiu operáciu v podtriede. Napríklad,

Príklad 1: Polymorfizmus s použitím prepísania metódy

 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ýstup :

 Programovací jazyk Java Spoločný anglický jazyk

Vo vyššie uvedenom príklade sme vytvorili nadtriedu s názvom Language a podtriedu s názvom Java. Tu je metóda displayInfo()prítomná v jazyku aj v jazyku Java.

Používa displayInfo()sa na tlač informácií. Tlačí však rôzne informácie v jazykoch a jazyku Java.

Na základe objektu použitého na volanie metódy sa vytlačia zodpovedajúce informácie.

Fungovanie Java Polymorfizmu

Poznámka : Metóda, ktorá sa volá, sa určuje počas vykonávania programu. Preto je prepísanie metódy za behu polymorfizmu .

2. Preťaženie metódy Java

V triede Java môžeme vytvárať metódy s rovnakým názvom, ak sa líšia parametrami. Napríklad,

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

Toto sa v Jave nazýva preťaženie metód. Rovnaká metóda tu vykoná rôzne operácie na základe parametra.

Príklad 3: Polymorfizmus využívajúci preťaženie metódy

 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ýstup :

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

Vo vyššie uvedenom príklade sme vytvorili triedu s názvom Pattern. Trieda obsahuje metódu s názvom, display()ktorá je preťažená.

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

Tu je hlavnou funkciou display()tlačiť vzor. Na základe predložených argumentov však metóda vykonáva rôzne operácie:

  • vypíše vzor *, ak nie je zadaný žiadny argument alebo
  • vypíše vzor parametra, ak je zadaný charargument jedného typu.

Poznámka : Metódu, ktorá sa volá, určuje kompilátor. Preto je tiež známy ako polymorfizmus v čase kompilácie.

3. Preťaženie operátora Java

Niektorí operátori v Jave sa správajú odlišne s rôznymi operandami. Napríklad,

  • + operátor je preťažený, aby vykonal numerické sčítanie, ako aj zreťazenie reťazcov, a
  • operátory ako &, |a !sú preťažené pre logické a bitové operácie.

Pozrime sa, ako môžeme dosiahnuť polymorfizmus pomocou preťaženia operátora.

+Operátor slúži na pridanie dvoch entít. V prostredí Java však +operátor vykonáva dve operácie.

1. Pri +použití s ​​číslami (celé čísla a čísla s pohyblivou rádovou čiarkou) vykoná matematické sčítanie. Napríklad,

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

2. Keď použijeme +operátor s reťazcami, vykoná reťazenie reťazcov (spojenie dvoch reťazcov). Napríklad,

 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.

Vo vyššie uvedenom príklade sme vytvorili objektovú premennú pl triedy ProgrammingLanguage. Tu je pl polymorfná premenná. To je preto, že,

  • Vo vyhlásení pl = new ProgrammingLanguage()pl odkazujte na objekt triedy ProgrammingLanguage.
  • A vo vyhlásení pl = new Java()pl odkazuje na objekt triedy Java.

Toto je príklad upcastingu v Jave.

Zaujímavé články...