Što je nadjačavanje metode?

Nadjačavanje metode koristi se u objektno orijentiranom programiranju unutar hijerarhije nasljeđivanja, a događa se kada se metoda definirana u nadklasi redefinira u podklasi. Obično metoda podklase radi nešto drugačije od metode superklase ili proširuje sposobnost nadklase, ali to ne mora biti slučaj. Nadjačavanje metode događa se kad god se metoda nadklase redefinira u podklasi, bez obzira na sadržaj redefinirane metode. Redefinirani potpisi metode moraju biti potpuno isti.

Na primjer, klasa A može sadržavati metodu zvanu “doSomething”, a ova metoda ne uzima ulazne parametre. Osim toga, klase B i C mogu biti podklase klase A. Klasa B može sadržavati metodu pod nazivom “doSomething”, koja ne uzima ulazne parametre, a klasa C može sadržavati metodu “doSomething” koja uzima broj kao ulazni parametar. U ovom primjeru, samo klasa B demonstrira nadjačavanje metode, jer njena metoda “doSomething” ima isti potpis metode kao i njena superklasa, klasa A. Metoda “doSomething” u klasi C, s druge strane, pokazuje preopterećenje metode jer stvara potpuno nova metoda.

Virtualno nasljeđivanje u C++ još je jedan primjer nadjačavanja metode. Virtualne metode u nadklasama mogu se ili ne moraju implementirati, ali svaka njihova definicija potklase primjer je nadjačavanja metode. Kada je metoda nadjačana u podklasi, metoda nadklase se ne poziva osim ako se eksplicitno ne pozove. Za ovaj specifičan način pozivanja nadjačane metode često se kaže da “skriva” implementaciju superklase.

Iako je nadjačavanje metoda vrlo fleksibilno, ne mogu se sve metode nadjačati, a ponekad bi ova krutost mogla biti poželjnija. I u Javi i u C++-u, specifične ključne riječi mogu se primijeniti u potpisima metoda kako bi se spriječilo nadjačavanje metode u podklasi. Da bi to učinila, Java koristi ključnu riječ “final”, a C++ koristi ključnu riječ “const”. Sprječavanje nadjačavanja metode može biti korisno ako određena funkcija uvijek treba biti nepromijenjena u cijelom stablu nasljeđivanja.

Općenito, jednostavne metode koje dobivaju male dijelove podataka ne bi trebale biti nadjačane. Slučajevi koji imaju najviše koristi od nadjačavanja su kada podklasa želi dodati funkcionalnost metodi superklase bez stvaranja potpuno nove metode za to. Neobični slučajevi u kojima se metoda mora potpuno preraditi za jednu specifičnu vrstu objekta također bi mogli imati koristi od ove tehnike. Kad god je metoda nadjačana, važno je da programer adekvatno komentira i metode superklase i metode potklase. U idealnom slučaju, ovi bi komentari trebali pojasniti što svaka varijanta metode radi, kao i kako se i zašto razlikuju.