Πολυμορφισμός σε Java OOPs με παράδειγμα

Πίνακας περιεχομένων:

Anonim

Τι είναι ο πολυμορφισμός στην Ιάβα;

Ο πολυμορφισμός στην Java εμφανίζεται όταν υπάρχουν μία ή περισσότερες τάξεις ή αντικείμενα που σχετίζονται μεταξύ τους από την κληρονομιά. Με άλλα λόγια, είναι η ικανότητα ενός αντικειμένου να λαμβάνει πολλές μορφές. Η κληρονομικότητα επιτρέπει στους χρήστες να κληρονομούν χαρακτηριστικά και μεθόδους και ο πολυμορφισμός χρησιμοποιεί αυτές τις μεθόδους για την εκτέλεση διαφορετικών εργασιών. Ο στόχος λοιπόν είναι η επικοινωνία, αλλά η προσέγγιση είναι διαφορετική.

Για παράδειγμα, έχετε ένα smartphone για επικοινωνία. Ο τρόπος επικοινωνίας που επιλέγετε μπορεί να είναι οτιδήποτε. Μπορεί να είναι μια κλήση, ένα γραπτό μήνυμα, ένα εικονογραφημένο μήνυμα, ένα ταχυδρομείο κ.λπ. Έτσι, ο στόχος είναι κοινός που είναι η επικοινωνία, αλλά η προσέγγισή τους είναι διαφορετική. Αυτό ονομάζεται Πολυμορφισμός.

Σε αυτό το σεμινάριο, θα μάθετε-

  • Τι είναι ο πολυμορφισμός;
  • Java Πολυμορφισμός σε OOP's με Παράδειγμα
  • Παράκαμψη μεθόδου
  • Διαφορά μεταξύ υπερφόρτωσης και υπέρβασης
  • Τι είναι ο Δυναμικός Πολυμορφισμός;
  • Σούπερ λέξη-κλειδί
  • Διαφορά μεταξύ στατικού και δυναμικού πολυμορφισμού

Κάντε κλικ εδώ εάν το βίντεο δεν είναι προσβάσιμο

Java Πολυμορφισμός σε OOP's με Παράδειγμα

Έχουμε μια γονική τάξη, «Λογαριασμός» με λειτουργία κατάθεσης και ανάληψης. Ο λογαριασμός έχει 2 θυγατρικές τάξεις Η λειτουργία κατάθεσης και ανάληψης είναι ίδια για την αποθήκευση και τον έλεγχο λογαριασμών. Έτσι, οι κληρονομικές μέθοδοι από την κατηγορία λογαριασμού θα λειτουργήσουν

Αλλαγή στην απαίτηση λογισμικού

Υπάρχει μια αλλαγή στην προδιαγραφή απαίτησης, κάτι που είναι τόσο κοινό στη βιομηχανία λογισμικού. Θα πρέπει να προσθέσετε προνομιακό λειτουργικό τραπεζικό λογαριασμό με δυνατότητα υπερανάληψης.

Για φόντο, η υπερανάληψη είναι μια διευκόλυνση στην οποία μπορείτε να αποσύρετε ένα ποσό περισσότερο από το διαθέσιμο υπόλοιπο στον λογαριασμό σας.

Επομένως, αποσύρετε τη μέθοδο για προνομιακές ανάγκες που πρέπει να εφαρμοστούν εκ νέου. Αλλά δεν αλλάζετε το δοκιμασμένο κομμάτι κώδικα στο λογαριασμό Ταμιευτηρίου και Ελέγχου. Αυτό είναι το πλεονέκτημα του OOPS

Βήμα 1) έτσι ώστε όταν η μέθοδος "αναλήφθηκε" για την αποθήκευση λογαριασμού ονομάζεται μέθοδος από την κατηγορία γονικού λογαριασμού.

Βήμα 2) Αλλά όταν η μέθοδος "Ανάληψη" για τον προνομιακό λογαριασμό (δυνατότητα υπερανάληψης) ονομάζεται μέθοδος ανάληψης που ορίζεται στην προνομιακή κατηγορία εκτελείται. Αυτός είναι ο πολυμορφισμός.

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

Η μέθοδος Overriding επαναπροσδιορίζει μια μέθοδο super class σε μια υποκατηγορία.

Κανόνες για παράκαμψη μεθόδου

  • Η υπογραφή της μεθόδου, δηλαδή το όνομα της μεθόδου, η λίστα παραμέτρων και ο τύπος επιστροφής πρέπει να ταιριάζουν ακριβώς.
  • Η παράκαμψη μέθοδος μπορεί να διευρύνει την προσβασιμότητα αλλά όχι να την περιορίσει, δηλαδή εάν είναι ιδιωτική στην κατηγορία βάσης, η παιδική τάξη μπορεί να τη δημοσιοποιήσει αλλά όχι το αντίστροφο.

Παράδειγμα

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Διαφορά μεταξύ υπερφόρτωσης και υπέρβασης

Μέθοδος υπερφόρτωσης Παράκαμψη μεθόδου

Η υπερφόρτωση μεθόδου είναι στην ίδια τάξη, όπου περισσότερες από μία μέθοδο έχουν το ίδιο όνομα αλλά διαφορετικές υπογραφές.

Η παράκαμψη της μεθόδου είναι όταν μία από τις μεθόδους στην υπερκατηγορία επαναπροσδιορίζεται στην υποκατηγορία. Σε αυτήν την περίπτωση, η υπογραφή της μεθόδου παραμένει η ίδια.

Πρώην:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Πρώην:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Τι είναι ο Δυναμικός Πολυμορφισμός;

Ο Δυναμικός Πολυμορφισμός είναι ο μηχανισμός με τον οποίο μπορούν να οριστούν πολλαπλές μέθοδοι με το ίδιο όνομα και υπογραφή στο superclass και την υποκατηγορία. Η κλήση σε μια παράκαμψη μεθόδου επιλύεται κατά το χρόνο εκτέλεσης.

Παράδειγμα Δυναμικού Πολυμορφισμού:

Μια μεταβλητή αναφοράς του super class μπορεί να αναφέρεται σε ένα αντικείμενο sub class

Doctor obj = new Surgeon();

Εξετάστε τη δήλωση

obj.treatPatient();

Εδώ η μεταβλητή αναφοράς "obj" είναι της τάξης των γονέων, αλλά το αντικείμενο που δείχνει είναι της θυγατρικής τάξης (όπως φαίνεται στο διάγραμμα).


Το obj.treatPatient () θα εκτελέσει τη μέθοδο treatPatient () της υποκατηγορίας - Χειρουργός

Εάν μια αναφορά βασικής κλάσης χρησιμοποιείται για την κλήση μιας μεθόδου, η μέθοδος που θα καλείται αποφασίζεται από την JVM, ανάλογα με το αντικείμενο που δείχνει η αναφορά

Για παράδειγμα, παρόλο που το obj είναι αναφορά στον γιατρό, καλεί τη μέθοδο του χειρουργού, καθώς δείχνει ένα αντικείμενο χειρουργού

Αυτό αποφασίζεται κατά τη διάρκεια του χρόνου εκτέλεσης και ως εκ τούτου ονομάζεται δυναμικός ή πολυμορφισμός χρόνου εκτέλεσης

Σούπερ λέξη-κλειδί

Τι γίνεται αν η μέθοδος treatPatient στην τάξη Surgeon θέλει να εκτελέσει τη λειτουργικότητα που ορίζεται στην κατηγορία Doctor και στη συνέχεια να εκτελέσει τη δική της συγκεκριμένη λειτουργικότητα;
Σε αυτήν την περίπτωση, λέξη-κλειδί

superμπορεί να χρησιμοποιηθεί για πρόσβαση σε μεθόδους της γονικής τάξης από την παιδική τάξη.
Η μέθοδος treatPatient στην τάξη Χειρουργός θα μπορούσε να γραφτεί ως:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Η λέξη-κλειδί super μπορεί να χρησιμοποιηθεί για πρόσβαση σε οποιοδήποτε μέλος δεδομένων ή μεθόδους της super class στην υποκατηγορία.Παράδειγμα: -Για να μάθετε Κληρονομικότητα, Πολυμορφισμό και σούπερ λέξη-κλειδί

Βήμα 1) Αντιγράψτε τον ακόλουθο κώδικα σε έναν επεξεργαστή

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

Βήμα 2) Αποθήκευση, μεταγλώττιση και εκτέλεση του κώδικα. Παρατηρήστε την έξοδο.
Βήμα 3) Διακοπές γραμμές # 6-9. Αποθήκευση, μεταγλώττιση και εκτέλεση του κώδικα. Παρατηρήστε την έξοδο.
Βήμα 4) Γραμμή αποτυχίας # 10. Αποθήκευση & μεταγλώττιση του κωδικού.
Βήμα 5) Σφάλμα =? Αυτό συμβαίνει επειδή η υποκατηγορία δεν έχει πρόσβαση σε ιδιωτικά μέλη της σούπερ τάξης.

Διαφορά μεταξύ στατικού και δυναμικού πολυμορφισμού

Στατικός πολυμορφισμός Δυναμικός πολυμορφισμός
Αφορά τη μέθοδο υπερφόρτωσης. Αφορά την παράκαμψη μεθόδου.

Τα σφάλματα, εάν υπάρχουν, επιλύονται κατά τη στιγμή της μεταγλώττισης. Δεδομένου ότι ο κώδικας δεν εκτελείται κατά τη σύνταξη, εξ ου και το όνομα στατικό.

Πρώην:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

Σε περίπτωση που μια μεταβλητή αναφοράς καλεί μια μέθοδο που παρακάμπτεται, η μέθοδος που θα καλείται καθορίζεται από το αντικείμενο, στην οποία η μεταβλητή αναφοράς δείχνει. Αυτό μπορεί να προσδιοριστεί μόνο κατά το χρόνο εκτέλεσης όταν ο κώδικας βρίσκεται υπό εκτέλεση, εξ ου και το όνομα δυναμικό.

Πρώην:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();