Поліморфізм 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. Тут один і той же метод буде виконувати різні операції на основі параметра.

Example 3: Polymorphism using method overloading

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

Output:

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

In the above example, we have created a class named Pattern. The class contains a method named display() that is overloaded.

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

Here, the main function of display() is to print the pattern. However, based on the arguments passed, the method is performing different operations:

  • prints a pattern of *, if no argument is passed or
  • prints pattern of the parameter, if a single char type argument is passed.

Note: The method that is called is determined by the compiler. Hence, it is also known as compile-time polymorphism.

3. Java Operator Overloading

Some operators in Java behave differently with different operands. For example,

  • + 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.

Цікаві статті...