Što je preopterećenje metode?

Preopterećenje metode je značajka u većini objektno orijentiranih programskih jezika u kojima dvije ili više metoda dijele isto ime, ali imaju različite parametre. Konkretno, broj, vrsta podataka i/ili redoslijed parametara su različiti. Kada je kod sastavljen, ispravna metoda će se automatski odabrati na temelju načina na koji se poziva. Metode su također poznate kao funkcije u nekim programskim jezicima, pa se preopterećenje metoda ponekad naziva preopterećenjem funkcija.

Jednostavan primjer preopterećenja metode bila bi metoda koja izračunava površinu kvadrata. Može se definirati kao getArea(Square s). Ova metoda se može preopteretiti kako bi se dodatno izračunala površina kruga dodavanjem metode getArea(Circle c).

Primarni zahtjev za preopterećenje metoda je da metode dijele isto ime. Njihovi potpisi metode – naziv metode, broj parametara i tipovi podataka parametara – bi inače trebali biti jedinstveni. Na taj način prevodilac može odrediti koju metodu će izvršiti.

Konstruktori, metode koje se koriste za instanciranje objekata, često su preopterećeni. To se radi za inicijalizaciju objekta s vrijednostima koje nisu zadane. Na primjer, objekt zaposlenika s dva polja (ime i datum rođenja, ili dob) može imati sljedeće preopterećene konstruktore: Employee(), Employee(name) i Employee(name, dob). Prvi konstruktor stvara objekt zaposlenika s praznim poljima imena i dob. Drugi postavlja polje imena, ali ostavlja dob polje praznim, a treći definira i naziv i dob polja.

Preopterećenje metode najčešće se vrši kako bi se više od jedne metode logično pojavilo kao jedna metoda. U primjeru getArea(), dok fizički postoje dvije metode, pozivatelju je predstavljena jedna, logička metoda getArea(). Na taj se način getArea() može proširiti da radi na drugim oblicima – trokutima, trapezima i tako dalje – dok se i dalje logički predstavlja kao jedna metoda.

Metode su također preopterećene radi očuvanja kompatibilnosti unatrag. Metodi koja radi složeni izračun mogao bi se dati novi zahtjev za izborno izvođenje istog izračuna uz malu promjenu. Metodi se dodaje novi parametar koji će odrediti način izračunavanja – na stari ili novi način.
Kako biste izbjegli pronalaženje svih slučajeva u kojima se metoda poziva i dodavanje novog parametra, metoda se može preopteretiti. Nova metoda će imati stari potpis i biti pozvana postojećim kodom. Sama neće sadržavati nikakvu logiku i jednostavno će pozvati modificiranu metodu i proći zadanu vrijednost “stari način” za novi parametar. Novi kod će pozvati modificiranu metodu i proslijediti novi parametar s odgovarajućom vrijednošću, starim ili novim načinom.
Preopterećenje metode je vrsta polimorfizma, u kojoj se ista logička metoda u praksi može koristiti na više načina. Preopterećenje metode nije isto što i nadjačavanje metode. Nadjačavanje metode je mjesto gdje se definicija metode u roditeljskoj klasi mijenja od strane podređene klase. U ovom slučaju, obje metode će imati isti potpis.