Vad är metodöverträdelse?

Metodöverskridande 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, en klass A kan innehålla en metod som kallas "dosomething", och den här metoden 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 "Dosomething" som tar ett nummer som en ingångsparameter. I det här exemplet skulle endast klass B visa metod som överskridit, eftersom dess "DoSomething" -metod har samma jagThod -signatur som sin superklass, klass A. Metoden "Dosomething" 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 är övergripande. 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" Superclass -implementeringen.

Ä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. Att göra detta, javaAnvänder det "slutliga" nyckelordet och C ++ använder "const" -nyckelordet. Att förhindra metodöverträdelse kan vara fördelaktigt om en viss funktion alltid ska 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.

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?