Полиморфизъм на Java (с примери)

В този урок ще научим за полиморфизма на Java и неговото прилагане с помощта на примери.

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

Тоест един и същ обект (метод или оператор или обект) може да извършва различни операции в различни сценарии.

Пример: Java полиморфизъм

 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()да изобразяваме квадрат и кръг, съответно.

Това ще работи перфектно. За всяка форма обаче трябва да създадем различни методи. Това ще направи нашия код несъвместим.

За да разрешим това, полиморфизмът в Java ни позволява да създадем един-единствен метод, render()който ще се държи по различен начин за различните форми.

Забележка : print()Методът също е пример за полиморфизъм. Той се използва за отпечатване на стойностите на различни видове харесва char, int, string, и т.н.

Можем да постигнем полиморфизъм в Java, като използваме следните начини:

  1. Замяна на метода
  2. Метод Претоварване
  3. Претоварване на оператора

Замяна на метода на Java

По време на наследяване в Java, ако един и същ метод присъства както в суперкласа, така и в подкласа. След това методът в подкласа заменя същия метод в суперкласа. Това се нарича замяна на метода.

В този случай същият метод ще извърши една операция в суперкласа и друга операция в подкласа. Например,

Пример 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(); ) )

Изход :

 Език за програмиране на Java Общ английски език

В горния пример създадохме суперклас с име Language и подклас с име Java. Тук методът displayInfo()присъства както в езика, така и в Java.

Използването на displayInfo()е за отпечатване на информацията. Той обаче отпечатва различна информация на език и Java.

Въз основа на обекта, използван за извикване на метода, се отпечатва съответната информация.

Работа на Java полиморфизъм

Забележка : Извиканият метод се определя по време на изпълнението на програмата. Следователно, заместването на метода е полиморфизъм по време на изпълнение .

2. Претоварване на Java метод

В клас Java можем да създадем методи със същото име, ако те се различават по параметри. Например,

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

Това е известно като претоварване на метода в Java. Тук един и същ метод ще изпълнява различни операции въз основа на параметъра.

Пример 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('#'); ) )

Изход :

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

В горния пример създадохме клас с име Pattern. Класът съдържа метод с име, display()който е претоварен.

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

Тук основната функция на display()е да отпечата шаблона. Въпреки това, въз основа на предадените аргументи, методът изпълнява различни операции:

  • отпечатва шаблон на *, ако не е предаден аргумент или
  • отпечатва шаблон на параметъра, ако charе предаден аргумент от един тип.

Забележка : Методът, който се извиква, се определя от компилатора. Следователно, той е известен също като полиморфизъм по време на компилация.

3. Претоварване на Java оператор

Някои оператори в Java се държат по различен начин с различните операнди. Например,

  • + operator is overloaded to perform numeric addition as well as string concatenation, and
  • operators like &, |, and ! are overloaded for logical and bitwise operations.

Let's see how we can achieve polymorphism using operator overloading.

The + operator is used to add two entities. However, in Java, the + operator performs two operations.

1. When + is used with numbers (integers and floating-point numbers), it performs mathematical addition. For example,

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

2. When we use the + operator with strings, it will perform string concatenation (join two strings). For example,

 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 от класа ProgrammingLanguage. Тук pl е полиморфна променлива. Това е така, защото,

  • В изявление pl = new ProgrammingLanguage()pl се позовава на обекта на класа ProgrammingLanguage.
  • И в изявление pl = new Java()pl се отнася до обекта на класа Java.

Това е пример за обновяване в Java.

Интересни статии...