Vad är åsidosättande av metod?

Metodöverskridande används i objektorienterad programmering inom en arvhierarki, och den inträffar när en metod som definieras i en superklass definieras om i en underklass. Vanligtvis gör underklassmetoden något annat än superklassmetoden eller utökas med superklassens kapacitet, men detta behöver inte vara fallet. Överskridande av metod sker närhelst en superklassmetod omdefinieras 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 heter "doSomething" och den här metoden tar inga ingångsparametrar. Dessutom kan klasserna B och C vara underklasser av 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 "doSomething" som tar ett nummer som en ingångsparameter. I det här exemplet skulle bara klass B demonstrera metodöverskridande, eftersom dess "doSomething" -metod har samma metodsignatur som dess superklass, klass A. Metoden "doSomething" i klass C å ​​andra sidan visar överbelastning av metoden eftersom den skapar en helt ny metod.

Virtuellt arv i C ++ är ett annat exempel på åsidosättande av metod. Virtuella metoder i superklasser kan kanske eller inte implementeras, men varje underklassdefinition av dem är ett exempel på åsidosättande av metod. När en metod åsidosätts i en underklass kallas metoden för superklass inte om den inte åberopas uttryckligen. Detta specifika sätt att kalla en åsidosatt metod sägs ofta för att "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 nyckeln "const". Att förhindra åsidosättande av metod kan vara fördelaktigt om en viss funktion alltid ska vara oförändrad i ett arvträd.

I allmänhet behöver enkla metoder som får små data inte behöva åsidosättas. Fall som tenderar att dra mest nytta av att åsidosätta ä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 om för en specifik typ av objekt kan också dra nytta av denna teknik. Närhelst en metod åsidosätts är det viktigt för programmeraren att tillräckligt kommentera både superklass och underklassmetoder. Idealiskt bör dessa kommentarer klargöra vad varje variant av metoden gör, samt hur och varför de skiljer sig åt.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?