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

Σε αυτό το σεμινάριο, θα μάθουμε για την παράκαμψη μεθόδων στην Java με τη βοήθεια παραδειγμάτων.

Στο τελευταίο σεμινάριο, μάθαμε για την κληρονομιά. Το Inheritance είναι μια ιδιότητα OOP που μας επιτρέπει να αντλήσουμε μια νέα κλάση (υποκατηγορία) από μια υπάρχουσα τάξη (superclass). Η υποκατηγορία κληρονομεί τα χαρακτηριστικά και τις μεθόδους του superclass.

Τώρα, εάν ορίζεται η ίδια μέθοδος τόσο στο superclass όσο και στο subclass, τότε η μέθοδος της κλάσης subclass αντικαθιστά τη μέθοδο του superclass. Αυτό είναι γνωστό ως παράκαμψη μεθόδου.

Παράδειγμα 1: Παράκαμψη μεθόδου

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Έξοδος :

 Είμαι σκύλος. 

Στο παραπάνω πρόγραμμα, η displayInfo()μέθοδος υπάρχει τόσο στην κατηγορία Superclass Animal όσο και στην υποκατηγορία Dog.

Όταν καλούμε displayInfo()χρησιμοποιώντας το αντικείμενο d1 (αντικείμενο της υποκατηγορίας), καλείται η μέθοδος του σκύλου υποκατηγορίας. Η displayInfo()μέθοδος της υποκατηγορίας παρακάμπτει την ίδια μέθοδο του superclass.

Παρατηρήστε τη χρήση του @Overrideσχολιασμού στο παράδειγμά μας. Στην Java, οι σχολιασμοί είναι τα μεταδεδομένα που χρησιμοποιήσαμε για την παροχή πληροφοριών στον μεταγλωττιστή. Εδώ, ο @Overrideσχολιασμός καθορίζει τον μεταγλωττιστή ότι η μέθοδος μετά από αυτόν τον σχολιασμό υπερισχύει της μεθόδου του superclass.

Δεν είναι υποχρεωτική η χρήση @Override. Ωστόσο, όταν το χρησιμοποιούμε, η μέθοδος πρέπει να ακολουθεί όλους τους κανόνες παράκαμψης. Διαφορετικά, ο μεταγλωττιστής θα δημιουργήσει σφάλμα.

Κανόνες υπέρβασης Java

  • Τόσο το superclass όσο και η υποκατηγορία πρέπει να έχουν το ίδιο όνομα μεθόδου, τον ίδιο τύπο επιστροφής και την ίδια λίστα παραμέτρων.
  • Δεν μπορούμε να παρακάμψουμε τη μέθοδο που δηλώνεται ως finalκαι static.
  • Πρέπει πάντα να παρακάμψουμε τις αφηρημένες μεθόδους του superclass (θα συζητηθούν σε επόμενα σεμινάρια).

super Keyword στην παράκαμψη Java

Μια συνηθισμένη ερώτηση που προκύπτει κατά την εκτέλεση παράκαμψης στην Java είναι:

Μπορούμε να έχουμε πρόσβαση στη μέθοδο του superclass μετά την παράκαμψη;

Λοιπόν, η απάντηση είναι ναι . Για να αποκτήσετε πρόσβαση στη μέθοδο του superclass από την υποκατηγορία, χρησιμοποιούμε τη superλέξη-κλειδί.

Παράδειγμα 2: Χρήση της υπερ-λέξης-κλειδιού

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Έξοδος :

Είμαι ζώο. Είμαι σκύλος.

Στο παραπάνω παράδειγμα, ο σκύλος υποκατηγορίας υπερισχύει της μεθόδου displayInfo()του Superclass Animal.

Όταν καλούμε τη μέθοδο displayInfo()χρησιμοποιώντας το αντικείμενο d1 της υποκατηγορίας Dog, καλείται η μέθοδος στην υποκατηγορία Dog. η μέθοδος μέσα στο superclass δεν καλείται.

Στο εσωτερικό displayInfo()της υποκατηγορίας Dog, έχουμε συνηθίσει super.displayInfo()να καλούμε displayInfo()το superclass.

Είναι σημαντικό να σημειωθεί ότι οι κατασκευαστές στην Java δεν κληρονομούνται. Ως εκ τούτου, δεν υπάρχει κάτι που να υπερισχύει ο κατασκευαστής στην Java.

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

Πρόσβαση προσδιοριστών στην παράκαμψη μεθόδου

Η ίδια μέθοδος που δηλώνεται στο superclass και στις υποκατηγορίες της μπορεί να έχει διαφορετικούς προσδιοριστές πρόσβασης. Ωστόσο, υπάρχει ένας περιορισμός.

Μπορούμε να χρησιμοποιήσουμε μόνο αυτούς τους προσδιοριστές πρόσβασης σε υποκατηγορίες που παρέχουν μεγαλύτερη πρόσβαση από τον προσδιοριστή πρόσβασης του superclass. Για παράδειγμα,

Ας υποθέσουμε, myClass()δηλώνεται μια μέθοδος στο superclass protected. Στη συνέχεια, η ίδια μέθοδος myClass()στην υποκατηγορία μπορεί να είναι είτε publicείτε protected, αλλά δεν είναι private.

Παράδειγμα 3: Προσδιορισμός πρόσβασης στην παράκαμψη

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Έξοδος :

 Είμαι σκύλος. 

Στο παραπάνω παράδειγμα, ο σκύλος υποκατηγορίας υπερισχύει της μεθόδου displayInfo()του Superclass Animal.

Κάθε φορά που καλούμε displayInfo()χρησιμοποιώντας το d1 (αντικείμενο της υποκατηγορίας), καλείται η μέθοδος μέσα στην υποκατηγορία.

Σημειώστε ότι, το displayInfo()δηλώνεται protectedστο Animal superclass. Η ίδια μέθοδος έχει τον publicπροσδιοριστή πρόσβασης στην υποκατηγορία Dog. Αυτό είναι δυνατό επειδή publicπαρέχει μεγαλύτερη πρόσβαση από το protected.

Επικείμενες αφηρημένες μέθοδοι

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

Θα μάθουμε περισσότερα για τις αφηρημένες τάξεις και την παράκαμψη των αφηρημένων μεθόδων σε μεταγενέστερα σεμινάρια.

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