Skip to main content

Vad är metodöverträdelse?

Övervägning av metod används i objektorienterad programmering inom en arvshierarki, och det inträffar när en metod som definieras i en superklass omdefinieras i en underklass.Vanligtvis gör underklassmetoden något annorlunda än Superclass -metoden eller expanderar på superklassens kapacitet, men detta behöver inte vara fallet.Metodöverskridande sker när en superklassmetod definieras om i en underklass, oavsett innehållet i den omdefinierade metoden.De omdefinierade metodsignaturerna måste vara exakt desamma.

Till exempel kan en klass A innehålla en metod som kallas dosomething, och denna metod tar inga inmatningsparametrar.Dessutom kan klasser B och C vara underklasser i klass A. Klass B kan innehålla en metod som kallas Dosomething, som inte tar några inmatningsparametrar, och klass C kan innehålla en metod som inte tar ett nummer som en ingångsparameter.I det här exemplet skulle endast klass B visa metod som är överskridande, eftersom dess DoSomething -metod har samma metodsignatur som sin superklass, klass A. DoSomething -metoden i klass C, å andra sidan, visar metodöverbelastning eftersom den skapar en helt ny metod.

Virtuell arv i C ++ är ett annat exempel på metod som åsidosätter.Virtuella metoder i Superclasses kan eller kanske inte implementeras, men någon underklassdefinition av dem är ett exempel på metod som åsidosätter.När en metod åsidosätts i en underklass kallas inte metoden för superklassen om den inte åberopas uttryckligen.Detta specifika sätt att kalla en åsidosatt metod sägs ofta dölja superklassimplementeringen.

Även om metodöverskridande är mycket flexibel, kan inte alla metoder åsidosättas och det finns tillfällen då denna styvhet kan vara att föredra.I både Java och C ++ kan specifika nyckelord tillämpas i metodsignaturer för att förhindra att en metod åsidosätts i en underklass.För att göra detta använder Java det slutliga nyckelordet och C ++ använder Const -nyckelordet.Att förhindra metodöverträdelse kan vara fördelaktigt om en viss funktion alltid bör vara oförändrad i ett arvträd.

I allmänhet bör enkla metoder som får små data inte behöva åsidosättas.Fall som tenderar att dra mest nytta av övergripande är när en underklass syftar till att lägga till funktionalitet till en superklassmetod utan att skapa en helt ny metod för att göra det.Ovanliga fall där en metod måste göras helt om för en specifik typ av objekt kan också dra nytta av denna teknik.När en metod åsidosätts är det viktigt för programmeraren att tillräckligt kommentera både superklass- och underklassmetoderna.Helst bör dessa kommentarer klargöra vad varje variant av metoden gör, liksom hur och varför de skiljer sig åt.