Java polimorfizmus (példákkal)

Ebben az oktatóanyagban példák segítségével megismerhetjük a Java polimorfizmust és annak megvalósítását.

A polimorfizmus az objektum-orientált programozás fontos fogalma. Ez egyszerűen több formát jelent.

Vagyis ugyanaz az entitás (módszer, operátor vagy objektum) különböző műveleteket hajthat végre különböző forgatókönyvekben.

Példa: Java polimorfizmus

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

Kimenet

 Négyzet megjelenítése … Kör megjelenítése … 

A fenti példában létrehoztunk egy szuperosztályt: Sokszög és két alosztály: Négyzet és Kör. Figyelje meg a render()módszer használatát .

A render()módszer fő célja az alakzat visszaadása. A négyzet megjelenítésének folyamata azonban eltér a kör megjelenítésének folyamatától.

Ennélfogva a render()módszer különböző módon viselkedik a különböző osztályokban. Vagy mondhatjuk render()polimorf.

Miért pont a polimorfizmus?

A polimorfizmus lehetővé teszi számunkra a következetes kód létrehozását. Az előző példában különböző módszereket is létrehozhatunk: renderSquare()illetve renderCircle()a négyzet és a kör renderelésére.

Ez tökéletesen fog működni. Minden alakhoz azonban különböző módszereket kell létrehoznunk. Ez következetlenné teszi a kódunkat.

Ennek megoldására a Java polimorfizmusa lehetővé teszi számunkra, hogy egyetlen módszert hozzunk létre, amely render()a különböző alakzatoknál másképp fog viselkedni.

Megjegyzés : A print()módszer a polimorfizmus példája is. Arra használják, hogy nyomtatni különféle típusaira tetszik char, int, stringstb

A Java-ban a következő módszerekkel érhetjük el a polimorfizmust:

  1. Módszer felülírása
  2. Módszer Túlterhelés
  3. Üzemeltető túlterhelése

Java módszer felülírása

A Java-ban való öröklés során, ha ugyanaz a módszer van jelen mind a szuperosztályban, mind az alosztályban. Ezután az alosztályban szereplő módszer felülírja ugyanazt a módszert a szuperosztályban. Ezt nevezzük metódus felülbírálásnak.

Ebben az esetben ugyanaz a módszer egy műveletet hajt végre a szuperosztályban, egy másik műveletet pedig az alosztályban. Például,

1. példa: Polimorfizmus módszer felülírással

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

Kimenet :

 Java programozási nyelv Közös angol nyelv

A fenti példában létrehoztunk egy Language nevű szuperosztályt és egy Java nevű alosztályt. Itt a módszer displayInfo()mind nyelvben, mind Java nyelven megtalálható.

Az displayInfo()információ kinyomtatása. Különböző információkat nyomtat azonban a Nyelv és a Java nyelven.

A módszer meghívására használt objektum alapján a megfelelő információk kinyomtatásra kerülnek.

Java polimorfizmus működése

Megjegyzés : A meghívott módszert a program végrehajtása során határozzuk meg. Ezért a módszer felülbírálása futásidejű polimorfizmus .

2. Java módszer túlterhelése

Java osztályban azonos nevű módszereket hozhatunk létre, ha paramétereikben különböznek egymástól. Például,

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

Ez úgynevezett módszer túlterhelés a Java-ban. Itt ugyanaz a módszer különböző műveleteket hajt végre a paraméter alapján.

3. példa: Polimorfizmus módszer túlterhelésével

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

Kimenet :

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

A fenti példában létrehoztunk egy Pattern nevű osztályt. Az osztály egy display()túlterhelt nevű metódust tartalmaz .

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

Itt a fő funkció display()a minta nyomtatása. Az átadott argumentumok alapján azonban a módszer különböző műveleteket hajt végre:

  • kinyomtatja a mintát *, ha nem adunk át argumentumot, vagy
  • kiírja a paraméter mintázatát, ha egyetlen chartípusú argumentumot adnak át.

Megjegyzés : A meghívott módszert a fordító határozza meg. Ennélfogva fordítási idejű polimorfizmusnak is nevezik.

3. Java Operator túlterhelés

A Java egyes operátorai másként viselkednek a különböző operandusokkal. Például,

  • + - az operátor túlterhelt a numerikus összeadás, valamint a húrok összefűzése érdekében, és
  • az operátorok kedvelik a &, |és !a logikai és bitenkénti műveletekhez túlterheltek.

Nézzük meg, hogyan érhetjük el a polimorfizmust az operátor túlterhelésével.

Az +operátor két entitás hozzáadására szolgál. Java-ban azonban az +operátor két műveletet hajt végre.

1. Ha +számokkal (egész számokkal és lebegőpontos számokkal) használjuk, matematikai összeadást hajt végre. Például,

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

2. Amikor az +operátort húrokkal használjuk, akkor karaktersorozatot hajt végre (két sztringet összekapcsol). Például,

 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.

A fenti példában létrehoztunk egy pl objektumváltozót a ProgrammingLanguage osztályból. Itt pl egy polimorf változó. Ez azért van, mert,

  • Az utasításban pl = new ProgrammingLanguage()pl utaljon a ProgrammingLanguage osztály objektumára.
  • És nyilatkozatban pl = new Java()pl utaljon a Java osztály objektumára.

Ez egy példa a Java-ban történő feltöltésre.

érdekes cikkek...