Skip to main content

Τι είναι η μέθοδος που υπερισχύει;

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

Για παράδειγμα, μια κατηγορία Α μπορεί να περιέχει μια μέθοδο που ονομάζεται DoSomething και αυτή η μέθοδος δεν λαμβάνει παραμέτρους εισόδου.Επιπλέον, οι κλάσεις Β και C μπορεί να είναι υποκατηγορίες της κατηγορίας Α. Η κατηγορία Β μπορεί να περιέχει μια μέθοδο που ονομάζεται DoSomething, η οποία δεν λαμβάνει παράμετροι εισόδου και η κλάση C μπορεί να περιέχει μια μέθοδο dosomething που παίρνει έναν αριθμό ως παράμετρο εισόδου.Σε αυτό το παράδειγμα, μόνο η κλάση Β θα επέδειξε υπερισχύει της μεθόδου, επειδή η μέθοδος της DoSomething έχει την ίδια υπογραφή μεθόδου με την υπερκλάση της, η κατηγορία Α. Η μέθοδος DoSomething στην κλάση C, από την άλλη πλευρά, αποδεικνύει την υπερφόρτωση της μεθόδου επειδή δημιουργεί μια εντελώς νέα μέθοδο.

Η εικονική κληρονομιά στην C ++ είναι ένα άλλο παράδειγμα της υπερχείλισης της μεθόδου.Οι εικονικές μέθοδοι στις υπερκλάσεις μπορεί ή δεν μπορεί να εφαρμοστούν, αλλά οποιοσδήποτε ορισμός υποκατηγοριών αυτών είναι μια περίπτωση που υπερισχύει της μεθόδου.Όταν μια μέθοδος αντικατασταθεί σε μια υποκατηγορία, η μέθοδος της υπερκλάσης δεν καλείται εκτός αν χρησιμοποιείται ρητά.Αυτός ο συγκεκριμένος τρόπος κλήσης μιας υπερβολικής μεθόδου λέγεται συχνά ότι κρύβει την υλοποίηση της υπερκλάσης.Και στις δύο Java και C ++, μπορούν να εφαρμοστούν συγκεκριμένες λέξεις -κλειδιά σε υπογραφές μεθόδου για να αποφευχθεί η αντικατάσταση μιας μεθόδου σε μια υποκατηγορία.Για να γίνει αυτό, η Java χρησιμοποιεί την τελική λέξη -κλειδί και το C ++ χρησιμοποιεί τη λέξη -κλειδί const.Η πρόληψη της μεθόδου που υπερισχύει μπορεί να είναι επωφελής εάν μια συγκεκριμένη λειτουργία πρέπει πάντα να παραμένει αμετάβλητη σε όλο το δέντρο κληρονομιάς.Οι περιπτώσεις που τείνουν να επωφελούνται περισσότερο από την υπερβολική είναι όταν μια υποκατηγορία στοχεύει να προσθέσει λειτουργικότητα σε μια μέθοδο superclass χωρίς να δημιουργήσει μια εντελώς νέα μέθοδο για να το πράξει.Οι ασυνήθιστες περιπτώσεις στις οποίες μια μέθοδος πρέπει να επανατοποθετηθεί πλήρως για έναν συγκεκριμένο τύπο αντικειμένου μπορεί επίσης να επωφεληθεί από αυτήν την τεχνική.Κάθε φορά που υπάρχει μια μέθοδος, είναι σημαντικό για τον προγραμματιστή να σχολιάσει επαρκώς τόσο τις μεθόδους Superclass όσο και υποκατηγορίας.Στην ιδανική περίπτωση, αυτά τα σχόλια θα πρέπει να διευκρινίσουν τι κάνει κάθε παραλλαγή της μεθόδου, καθώς και πώς και γιατί διαφέρουν.