Πολυμορφισμός 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(); ) )

Παραγωγή

 Rendering Square… Rendering Circle… 

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει ένα superclass: Πολύγωνο και δύο υποκατηγορίες: Square και Circle. Παρατηρήστε τη χρήση της render()μεθόδου.

Ο κύριος σκοπός της render()μεθόδου είναι η απόδοση του σχήματος. Ωστόσο, η διαδικασία απόδοσης ενός τετραγώνου είναι διαφορετική από τη διαδικασία απόδοσης ενός κύκλου.

Ως εκ τούτου, η render()μέθοδος συμπεριφέρεται διαφορετικά σε διαφορετικές τάξεις. Ή, μπορούμε να πούμε ότι render()είναι πολυμορφικό.

Γιατί ο πολυμορφισμός;

Ο πολυμορφισμός μας επιτρέπει να δημιουργήσουμε συνεπή κώδικα. Στο προηγούμενο παράδειγμα, μπορούμε επίσης να δημιουργήσουμε διαφορετικές μεθόδους: renderSquare()και renderCircle()να αποδώσουμε τετράγωνο και κύκλο, αντίστοιχα.

Αυτό θα λειτουργήσει τέλεια. Ωστόσο, για κάθε σχήμα, πρέπει να δημιουργήσουμε διαφορετικές μεθόδους. Θα κάνει τον κώδικα μας ασυνεπή.

Για να επιλυθεί αυτό, ο πολυμορφισμός στην Java μας επιτρέπει να δημιουργήσουμε μια μοναδική μέθοδο render()που θα συμπεριφέρεται διαφορετικά για διαφορετικά σχήματα.

Σημείωση : Η print()μέθοδος είναι επίσης ένα παράδειγμα πολυμορφισμού. Χρησιμοποιείται για την εκτύπωση τιμές των διαφόρων τύπων αρέσει char, int, string, κ.λπ.

Μπορούμε να επιτύχουμε πολυμορφισμό στην Java χρησιμοποιώντας τους ακόλουθους τρόπους:

  1. Παράκαμψη μεθόδου
  2. Μέθοδος υπερφόρτωσης
  3. Υπερφόρτωση χειριστή

Παράκαμψη μεθόδου Java

Κατά τη διάρκεια της κληρονομιάς στην Java, εάν υπάρχει η ίδια μέθοδος τόσο στο superclass όσο και στην υποκατηγορία. Στη συνέχεια, η μέθοδος στην υποκατηγορία υπερισχύει της ίδιας μεθόδου στο superclass. Αυτό ονομάζεται παράκαμψη μεθόδου.

Σε αυτήν την περίπτωση, η ίδια μέθοδος θα εκτελέσει μία λειτουργία στο superclass και μια άλλη λειτουργία στην υποκατηγορία. Για παράδειγμα,

Παράδειγμα 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 Κοινή αγγλική γλώσσα

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει ένα superclass με την ονομασία 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(), ανατρέξτε στο αντικείμενο της κλάσης ProgrammingLanguage.
  • Και, στη δήλωση pl = new Java(), ανατρέξτε στο αντικείμενο της κλάσης Java.

Αυτό είναι ένα παράδειγμα αναβάθμισης στην Java.

ενδιαφέροντα άρθρα...