Kas yra metodo nepaisymas?

Metodo nepaisymas naudojamas objektiniam programavimui paveldėjimo hierarchijoje ir įvyksta, kai superklasėje apibrėžtas metodas iš naujo apibrėžiamas poklasyje. Paprastai poklasio metodas veikia kitaip nei superklasės metodas arba išplečia superklasės galimybes, tačiau taip nebūtina. Metodo nepaisymas įvyksta, kai poklasyje iš naujo apibrėžiamas superklasės metodas, neatsižvelgiant į iš naujo apibrėžto metodo turinį. Iš naujo apibrėžtų metodų parašai turi būti visiškai tokie patys.

Pavyzdžiui, A klasėje gali būti metodas, vadinamas „doSomething“, ir šis metodas nereikalauja įvesties parametrų. Be to, B ir C klasės gali būti A klasės poklasiai. B klasėje gali būti metodas, vadinamas „doSomething“, kuris nereikalauja įvesties parametrų, o C klasėje gali būti metodas „doSomething“, kuris kaip įvesties parametrą naudoja skaičių. Šiame pavyzdyje tik B klasė parodytų metodo nepaisymą, nes jo metodas „doSomething“ turi tą patį metodo parašą kaip ir A klasės superklasė. Kita vertus, C klasės metodas „doSomething“ parodo metodo perkrovimą, nes sukuria visiškai naujas metodas.

Virtualus paveldėjimas C++ yra dar vienas metodo nepaisymo pavyzdys. Virtualūs superklasių metodai gali būti įgyvendinti arba ne, tačiau bet koks jų poklasio apibrėžimas yra metodo nepaisymo pavyzdys. Kai poklasyje metodas yra nepaisomas, superklasės metodas nėra iškviečiamas, nebent jis būtų aiškiai iškviestas. Dažnai sakoma, kad šis specifinis nepaisyto metodo iškvietimo būdas „slepia“ superklasės įgyvendinimą.

Nors metodo nepaisymas yra labai lankstus, ne visi metodai gali būti nepaisyti, ir kartais šis nelankstumas gali būti geresnis. Tiek „Java“, tiek „C++“ metodų parašuose gali būti taikomi konkretūs raktiniai žodžiai, kad poklasyje metodas nebūtų perrašytas. Norėdami tai padaryti, „Java“ naudoja „galutinį“ raktinį žodį, o C++ – „const“. Metodo nepaisymo prevencija gali būti naudinga, jei tam tikra funkcija paveldėjimo medyje visada turėtų būti nepakitusi.

Apskritai, paprastų metodų, kurie gauna mažas duomenų dalis, neturėtų būti perrašyti. Atvejai, kuriems dažniausiai naudinga nepaisymas, yra tada, kai poklasis siekia pridėti funkcionalumą superklasės metodui, nesukurdamas tam visiškai naujo metodo. Šis metodas taip pat gali būti naudingas neįprastiems atvejams, kai metodas turi būti visiškai pertvarkytas tam tikram objekto tipui. Kai metodas yra nepaisomas, programuotojui svarbu tinkamai pakomentuoti aukščiausios klasės ir poklasio metodus. Idealiu atveju šiose pastabose turėtų būti paaiškinta, ką veikia kiekvienas metodo variantas, taip pat kaip ir kodėl jie skiriasi.