Polymorfismus Java (s příklady)

V tomto výukovém programu se na příkladech seznámíme s polymorfismem Java a jeho implementací.

Polymorfismus je důležitý koncept objektově orientovaného programování. Znamená to prostě více než jednu formu.

To znamená, že stejná entita (metoda nebo operátor nebo objekt) může provádět různé operace v různých scénářích.

Příklad: Java Polymorphism

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

 Rendering Square … Rendering Circle … 

Ve výše uvedeném příkladu jsme vytvořili nadtřídu: Polygon a dvě podtřídy: Čtverec a Kruh. Všimněte si použití render()metody.

Hlavním účelem render()metody je vykreslení tvaru. Proces vykreslení čtverce je však jiný než proces vykreslení kruhu.

Proto se render()metoda v různých třídách chová odlišně. Nebo můžeme říci, že render()je polymorfní.

Proč polymorfismus?

Polymorfismus nám umožňuje vytvářet konzistentní kód. V předchozím příkladu můžeme také vytvořit různé metody: renderSquare()a renderCircle()vykreslit čtverec a kruh.

To bude fungovat perfektně. Pro každý tvar však musíme vytvořit různé metody. Náš kód bude nekonzistentní.

Abychom to vyřešili, polymorfismus v Javě nám umožňuje vytvořit jedinou metodu, render()která se bude chovat odlišně pro různé tvary.

Poznámka : print()Metoda je také příkladem polymorfismu. Používá se k tisku hodnot různých typů rád char, int, stringatd

Polymorfismu v Javě můžeme dosáhnout pomocí následujících způsobů:

  1. Přepsání metody
  2. Přetížení metody
  3. Přetížení operátora

Přepsání metody Java

Během dědičnosti v Javě, pokud je stejná metoda přítomna jak v nadtřídě, tak v podtřídě. Potom metoda v podtřídě přepíše stejnou metodu v nadtřídě. Tomu se říká přepsání metody.

V tomto případě stejná metoda provede jednu operaci v nadtřídě a další operaci v podtřídě. Například,

Příklad 1: Polymorfismus s použitím přepsání metody

 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 Společný anglický jazyk

Ve výše uvedeném příkladu jsme vytvořili nadtřídu s názvem Language a podtřídu s názvem Java. Zde je metoda displayInfo()přítomna jak v jazyce, tak v Javě.

Použití displayInfo()je k tisku informací. Tiskne však různé informace v jazycích a jazyce Java.

Na základě objektu použitého k volání metody se vytisknou odpovídající informace.

Práce s polymorfismem Java

Poznámka : Metoda, která je volána, je určena během provádění programu. Proto je přepsání metody běhový polymorfismus .

2. Přetížení metody Java

Ve třídě Java můžeme vytvářet metody se stejným názvem, pokud se liší v parametrech. Například,

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

Toto je známé jako přetížení metody v Javě. Tady stejná metoda provede různé operace založené na parametru.

Příklad 3: Polymorfismus využívající přetížení metody

 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 :

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

Ve výše uvedeném příkladu jsme vytvořili třídu s názvem Pattern. Třída obsahuje metodu s názvem, display()která je přetížena.

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

Zde je hlavní funkcí display()tisku vzor. Na základě předaných argumentů však metoda provádí různé operace:

  • vypíše vzor *, pokud není předán žádný argument nebo
  • vypíše vzor parametru, pokud charje předán argument jednoho typu.

Poznámka : Metodu, která je volána, určuje kompilátor. Proto je také známý jako polymorfismus v době kompilace.

3. Přetížení operátora Java

Někteří operátoři v Javě se chovají odlišně s různými operandy. Například,

  • + operátor je přetížen, aby provedl numerické přidání a zřetězení řetězců, a
  • operátory jako &, |a !jsou přetíženy pro logické a bitové operace.

Podívejme se, jak můžeme dosáhnout polymorfismu pomocí přetížení operátoru.

+Operátor slouží k přidání dvou entit. V Javě však +operátor provádí dvě operace.

1. Když +se používá s čísly (celá čísla a čísla s plovoucí desetinnou čárkou), provádí matematické sčítání. Například,

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

2. Když použijeme +operátor s řetězci, provede zřetězení řetězců (spojení dvou řetězců). Napří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.

Ve výše uvedeném příkladu jsme vytvořili objektovou proměnnou pl třídy ProgrammingLanguage. Zde je pl polymorfní proměnná. To je proto, že,

  • V příkazu pl = new ProgrammingLanguage()pl odkazujte na objekt třídy ProgrammingLanguage.
  • A v prohlášení pl = new Java()pl odkazují na objekt třídy Java.

Toto je příklad upcastingu v Javě.

Zajímavé články...