Polimorfism Java (cu exemple)

În acest tutorial, vom afla despre polimorfismul Java și implementarea acestuia cu ajutorul unor exemple.

Polimorfismul este un concept important de programare orientată pe obiecte. Înseamnă pur și simplu mai multe forme.

Adică, aceeași entitate (metodă sau operator sau obiect) poate efectua operațiuni diferite în scenarii diferite.

Exemplu: Polimorfismul 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(); ) )

Ieșire

 Rendering Square … Rendering Circle … 

În exemplul de mai sus, am creat o superclasă: poligon și două subclase: pătrat și cerc. Observați utilizarea render()metodei.

Scopul principal al render()metodei este de a reda forma. Cu toate acestea, procesul de redare a unui pătrat este diferit de procesul de redare a unui cerc.

Prin urmare, render()metoda se comportă diferit în diferite clase. Sau, putem spune că render()este polimorf.

De ce Polimorfismul?

Polimorfismul ne permite să creăm cod consistent. În exemplul anterior, putem crea, de asemenea, diferite metode: renderSquare()și renderCircle()pentru a reda Square, respectiv Circle.

Acest lucru va funcționa perfect. Cu toate acestea, pentru fiecare formă, trebuie să creăm metode diferite. Acesta va face codul nostru inconsistent.

Pentru a rezolva acest lucru, polimorfismul în Java ne permite să creăm o singură metodă render()care se va comporta diferit pentru diferite forme.

Notă : print()Metoda este, de asemenea, un exemplu de polimorfism. Este folosit pentru a imprima valori de diferite tipuri ca char, int, string, etc.

Putem realiza polimorfism în Java folosind următoarele moduri:

  1. Anularea metodei
  2. Metoda de supraîncărcare
  3. Supraîncărcarea operatorului

Anularea Metodei Java

În timpul moștenirii în Java, dacă aceeași metodă este prezentă atât în ​​superclasă, cât și în subclasă. Apoi, metoda din subclasă anulează aceeași metodă din superclasă. Aceasta se numește metoda suprascriere.

În acest caz, aceeași metodă va efectua o operație în superclasă și o altă operație în subclasă. De exemplu,

Exemplul 1: Polimorfism folosind metoda suprascriere

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

Ieșire :

 Limbaj de programare Java Limba engleză comună

În exemplul de mai sus, am creat o superclasă numită Limbă și o subclasă numită Java. Aici, metoda displayInfo()este prezentă atât în ​​limbă, cât și în Java.

Utilizarea displayInfo()este pentru a imprima informațiile. Cu toate acestea, tipărește informații diferite în limbă și Java.

Pe baza obiectului folosit pentru a apela metoda, informațiile corespunzătoare sunt tipărite.

Funcționarea polimorfismului Java

Notă : Metoda care se numește este determinată în timpul executării programului. Prin urmare, suprascrierea metodei este un polimorfism de execuție .

2. Supraîncărcarea metodei Java

Într-o clasă Java, putem crea metode cu același nume dacă diferă în parametri. De exemplu,

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

Acest lucru este cunoscut sub numele de supraîncărcare a metodelor în Java. Aici, aceeași metodă va efectua operațiuni diferite pe baza parametrului.

Exemplul 3: Polimorfism folosind supraîncărcarea metodei

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

Ieșire :

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

În exemplul de mai sus, am creat o clasă numită Model. Clasa conține o metodă numită display()care este supraîncărcată.

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

Aici, funcția principală a display()este de a imprima modelul. Cu toate acestea, pe baza argumentelor transmise, metoda efectuează diferite operațiuni:

  • tipărește un model de *, dacă nu este trecut niciun argument sau
  • tipărește modelul parametrului, dacă chareste trecut un argument de tip unic .

Notă : Metoda care este apelată este determinată de compilator. Prin urmare, este, de asemenea, cunoscut sub numele de polimorfism în timp de compilare.

3. Supraîncărcarea operatorului Java

Unii operatori din Java se comportă diferit cu operanzi diferiți. De exemplu,

  • + operatorul este suprasolicitat pentru a efectua adăugarea numerică, precum și concatenarea șirurilor și
  • operatorilor le place &,, |și !sunt supraîncărcați pentru operațiuni logice și bit-bit.

Să vedem cum putem realiza polimorfismul folosind supraîncărcarea operatorului.

+Operatorul este utilizat pentru a adăuga două entități. Cu toate acestea, în Java, +operatorul efectuează două operații.

1. Când +este utilizat cu numere (numere întregi și cu virgulă mobilă), se efectuează adunarea matematică. De exemplu,

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

2. Când folosim +operatorul cu șiruri, acesta va efectua concatenarea șirului (uniți două șiruri). De exemplu,

 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.

În exemplul de mai sus, am creat o variabilă obiect pl din clasa ProgrammingLanguage. Aici, pl este o variabilă polimorfă. Asta pentru ca,

  • În declarație pl = new ProgrammingLanguage(), pl se referă la obiectul clasei ProgrammingLanguage.
  • Și, în declarație pl = new Java(), pl se referă la obiectul clasei Java.

Acesta este un exemplu de upcasting în Java.

Articole interesante...