Java-polymorfismi (esimerkkejä)

Tässä opetusohjelmassa opitaan Java-polymorfismista ja sen toteutuksesta esimerkkien avulla.

Polymorfismi on tärkeä objektiivisen ohjelmoinnin käsite. Se tarkoittaa yksinkertaisesti useampaa kuin yhtä muotoa.

Toisin sanoen sama entiteetti (menetelmä tai operaattori tai objekti) voi suorittaa erilaisia ​​toimintoja eri tilanteissa.

Esimerkki: Java-polymorfismi

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

Tuotos

 Ruudun renderöinti … Ympyrän renderöinti 

Edellä olevassa esimerkissä olemme luoneet superluokan: monikulmion ja kaksi alaluokkaa: neliö ja ympyrä. Huomaa render()menetelmän käyttö.

Menetelmän päätarkoitus render()on muodon renderointi. Neliön renderointi on kuitenkin erilainen kuin ympyrän renderöinti.

Siksi render()menetelmä käyttäytyy eri tavoin eri luokissa. Tai voimme sanoa render()olevan polymorfinen.

Miksi polymorfismi?

Polymorfismi antaa meille mahdollisuuden luoda johdonmukainen koodi. Edellisessä esimerkissä voimme myös luoda erilaisia ​​menetelmiä: renderSquare()ja renderCircle()neliön ja Ympyrän renderöimiseksi.

Tämä toimii täydellisesti. Jokaiselle muodolle meidän on kuitenkin luotava erilaisia ​​menetelmiä. Se tekee koodistamme epäjohdonmukaisen.

Tämän ratkaisemiseksi Java-polymorfismi antaa meille mahdollisuuden luoda yksi menetelmä render(), joka käyttäytyy eri tavalla eri muodoille.

Huomaa : print()Menetelmä on myös esimerkki polymorfismista. Sitä käytetään tulostaa arvot erityyppisten like char, int, stringjne

Voimme saavuttaa Java-polymorfismin seuraavilla tavoilla:

  1. Menetelmän ohittaminen
  2. Menetelmä Ylikuormitus
  3. Kuljettajan ylikuormitus

Java-menetelmän ohittaminen

Javan perimisen aikana, jos sama menetelmä esiintyy sekä yliluokassa että alaluokassa. Sitten alaluokan menetelmä ohittaa saman menetelmän yliluokassa. Tätä kutsutaan menetelmän ohittamiseksi.

Tällöin sama menetelmä suorittaa yhden toiminnan yliluokassa ja toisen toiminnon alaluokassa. Esimerkiksi,

Esimerkki 1: Polymorfismi menetelmää syrjäyttämällä

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

Tuotos :

 Java-ohjelmointikieli Yleinen englannin kieli

Yllä olevassa esimerkissä olemme luoneet superluokan nimeltä Kieli ja aliluokan nimeltä Java. Tässä menetelmä displayInfo()on läsnä sekä kielellä että Java: lla.

Käyttö displayInfo()on tulostaa tiedot. Se kuitenkin tulostaa erilaisia ​​tietoja kielellä ja Java: lla.

Menetelmän kutsumiseen käytetyn objektin perusteella vastaavat tiedot tulostetaan.

Java-polymorfismin työskentely

Huomaa : Menetelmä, jota kutsutaan, määritetään ohjelman suorituksen aikana. Täten menetelmän ohittaminen on ajoajan polymorfismi .

2. Java-menetelmän ylikuormitus

Java-luokassa voimme luoda menetelmiä samalla nimellä, jos ne eroavat toisistaan ​​parametreissa. Esimerkiksi,

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

Tätä kutsutaan Java-menetelmän ylikuormitukseksi. Tässä sama menetelmä suorittaa erilaisia ​​toimintoja parametrin perusteella.

Esimerkki 3: Polymorfismi käyttäen menetelmän ylikuormitusta

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

Tuotos :

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

Yllä olevassa esimerkissä olemme luoneet luokan nimeltä Pattern. Luokka sisältää nimeltään display()ylikuormitetun menetelmän .

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

Tässä päätehtävä display()on tulostaa kuvio. Lähetettyjen argumenttien perusteella menetelmä kuitenkin suorittaa erilaisia ​​toimintoja:

  • tulostaa mallin *, jos argumenttia ei välitetä, tai
  • tulostaa parametrin mallin, jos yhden chartyyppinen argumentti välitetään.

Huomautus : Kääntäjä määrittää kutsutun menetelmän. Siksi sitä kutsutaan myös kokoamisajan polymorfismiksi.

3. Java-operaattorin ylikuormitus

Jotkut Java-operaattorit käyttäytyvät eri tavalla eri operandien kanssa. Esimerkiksi,

  • + - operaattori on ylikuormitettu suorittamaan numeerinen lisäys sekä merkkijonon ketjutus ja
  • operaattorit pitävät &, |ja !ovat ylikuormitettuja loogisille ja bittioperaatioille.

Katsotaanpa, miten voimme saavuttaa polymorfismin operaattorin ylikuormituksella.

+Operaattori käytetään lisätä kaksi kokonaisuutta. Java- +operaattori kuitenkin suorittaa kaksi toimintoa.

1. Kun +sitä käytetään numeroiden (kokonaislukujen ja liukulukujen) kanssa, se suorittaa matemaattisen lisäyksen. Esimerkiksi,

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

2. Kun käytämme +operaattoria merkkijonojen kanssa, se suorittaa merkkijonon ketjutuksen (yhdistää kaksi merkkijonoa). Esimerkiksi,

 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.

Yllä olevassa esimerkissä olemme luoneet ProgrammingLanguage-luokan objektimuuttujan pl. Tässä pl on polymorfinen muuttuja. Tämä johtuu siitä, että,

  • Lausekkeessa pl = new ProgrammingLanguage()pl viittaa ProgrammingLanguage-luokan objektiin.
  • Ja lausunnossa pl = new Java()pl viittaa Java-luokan objektiin.

Tämä on esimerkki Java-lähetyksen lähettämisestä.

Mielenkiintoisia artikkeleita...