Јава полиморфизам (са примерима)

У овом упутству ћемо научити о полиморфизму Јава и његовој примени уз помоћ примера.

Полиморфизам је важан концепт објектно оријентисаног програмирања. То једноставно значи више облика.

Односно, исти ентитет (метода или оператор или објекат) може изводити различите операције у различитим сценаријима.

Пример: Јава полиморфизам

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

Оутпут

 Рендерирајући квадрат … Рендерирајући круг … 

У горњем примеру створили смо суперкласу: Полигон и две поткласе: Квадрат и Круг. Обратите пажњу на употребу render()методе.

Главна сврха render()методе је да прикаже облик. Међутим, поступак приказивања квадрата разликује се од поступка приказивања круга.

Дакле, render()метода се понаша различито у различитим класама. Или, можемо рећи да render()је полиморфна.

Зашто полиморфизам?

Полиморфизам нам омогућава да створимо доследан код. У претходном примеру такође можемо створити различите методе: renderSquare()и renderCircle()да прикажемо квадрат и круг, респективно.

Ово ће савршено функционисати. Међутим, за сваки облик морамо створити различите методе. То ће учинити наш код недоследним.

Да бисмо то решили, полиморфизам у Јави омогућава нам да створимо једну методу render()која ће се различито понашати за различите облике.

Напомена : print()Метода је такође пример полиморфизма. Користи се за штампање вредности различитих типова волим char, int, string, итд

Полиморфизам у Јави можемо постићи на следеће начине:

  1. Надјачавање методе
  2. Преоптерећење метода
  3. Преоптерећење оператера

Замена Јава методе

Током наслеђивања у Јави, ако је исти метод присутан и у суперкласи и у подкласи. Затим, метода у подкласи поништава исту методу у суперкласи. То се назива надјачавање методе.

У овом случају, исти метод ће извршити једну операцију у суперкласи, а другу операцију у подкласи. На пример,

Пример 1: Полиморфизам применом методе надјачавања

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

Излаз :

 Програмски језик Јава Заједнички енглески језик

У горњем примеру створили смо суперкласу под именом Лангуаге и подкласу под називом Јава. Овде је метода displayInfo()присутна и у језику и у језику Јава.

Употреба displayInfo()је за штампање информација. Међутим, штампа различите информације на језику и на језику Јава.

На основу објекта који се користи за позивање методе, штампају се одговарајуће информације.

Деловање полиморфизма Јава

Напомена : Метод који се позива одређује се током извршавања програма. Дакле, надјачавање методе је полиморфизам времена извођења .

2. Преоптерећење Јава методе

У Јава класи можемо створити методе са истим именом ако се разликују у параметрима. На пример,

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

Ово је познато као преоптерећење метода у Јави. Овде ће иста метода изводити различите операције на основу параметра.

Пример 3: Полиморфизам коришћењем методе преоптерећења

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

Излаз :

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

У горњем примеру смо креирали класу која се зове Паттерн. Класа садржи метод са именом display()који је преоптерећен.

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

Овде је главна функција display()штампање узорка. Међутим, на основу прослеђених аргумената, метода изводи различите операције:

  • исписује образац *, ако ниједан аргумент није прослеђен или
  • исписује образац параметра ако charје прослеђен аргумент једног типа.

Напомена : Метод који се позива одређује компајлер. Отуда је познат и као полиморфизам током компајлирања.

3. Преоптерећење Јава оператора

Неки оператери у Јави понашају се различито са различитим операндима. На пример,

  • + оператор је преоптерећен да изврши нумеричко сабирање као и спајање низова, и
  • оператери попут &, |и !преоптерећени су за логичке и битне операције.

Погледајмо како можемо постићи полиморфизам користећи преоптерећење оператора.

+Оператер се користи за додавање два ентитета. Међутим, на Јави +оператер изводи две операције.

1. Када +се користи са бројевима (цели бројеви и бројеви са покретном зарезом), он врши математичко сабирање. На пример,

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

2. Када користимо +оператор са стринговима, он ће извршити спајање низова (спојити две жице). На пример,

 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.

У горњем примеру смо креирали објектну променљиву пл класе ПрограммингЛангуаге. Овде је пл полиморфна променљива. То је зато,

  • У изјави pl = new ProgrammingLanguage(), пл се односи на објекат класе ПрограммингЛангуаге.
  • И, у изјави pl = new Java(), пл се односи на објекат класе Јава.

Ово је пример надоградње на Јави.

Занимљиви Чланци...