Nadjačavanje naspram preopterećenja
Nadjačavanje metode i Preopterećenje metode dva su koncepta/tehnike/značajke koje se nalaze u nekim programskim jezicima. Oba koncepta omogućuju programeru da pruži različite implementacije za metode s istim imenom. Nadjačavanje metode omogućuje programeru da osigura alternativnu implementaciju unutar podklase za metodu koja je već definirana unutar svoje super klase. Preopterećenje metoda omogućuje programeru da pruži različite implementacije za više metoda s istim imenom (unutar iste klase).
Što je nadjačavanje?
Kao što je gore spomenuto, klasa može proširiti superklasu ili nadređenu klasu, u objektno orijentiranim programskim jezicima. Klasa dijete može imati svoje vlastite metode ili po izboru može imati vlastite implementacije metoda koje su već definirane u svojoj roditeljskoj klasi (ili jednoj od njenih velikih roditeljskih klasa). Dakle, kada se ovo drugo dogodi, to se zove nadjačavanje metode. Drugim riječima, ako podređena klasa pruža implementaciju metode s istim potpisom i tipom povrata kao metoda koja je već definirana u jednoj od svojih roditeljskih klasa, kaže se da je ta metoda nadjačana (zamijenjena) implementacijom podređene klase.. Dakle, ako postoji nadjačana metoda u klasi, sustav za izvođenje će morati odlučiti koja se implementacija metode koristi. Ovaj se problem rješava promatranjem točne vrste objekta koji se koristi za njegovo pozivanje. Ako se objekt roditeljske klase koristi za pozivanje nadjačane metode, tada se koristi implementacija u roditeljskoj klasi. Slično, ako se koristi objekt podređene klase, tada se koristi implementacija podređene klase. Moderni programski jezici kao što su Java, Eifell, C++ i Python dopuštaju nadjačavanje metoda.
Što je preopterećenje?
Preopterećenje metoda je značajka koju pružaju neki programski jezici za stvaranje više od jedne metode s istim imenom, ali s različitim vrstama ulaza i izlaza. Ova značajka je dostupna u modernim programskim jezicima kao što su Java, C, C++ i VB. NET. Možete preopteretiti metodu stvaranjem druge metode s istim imenom, ali s drugačijim potpisom metode ili različitim povratnim tipom (ili oboje). Na primjer, ako imate method1(type1 t1) i method1(type2 t2) unutar iste klase, onda su one preopterećene. Tada će sustav morati odlučiti koji će se izvršiti kada se pozove. Ova se razlika provodi promatranjem tipa parametra(a) proslijeđenog metodi. Ako je argument tipa1, poziva se prva implementacija, dok ako je tipa2, poziva se druga implementacija.
Koja je razlika između nadjačavanja i preopterećenja?
Iako se nadjačavanje metode i preopterećenje metode koriste za pružanje metode s različitim implementacijama, postoje ključne razlike između ta dva koncepta/tehnike. Prije svega, subjekti nadjačavanja metoda uvijek ostaju unutar različitih klasa, dok subjekti preopterećenja metoda ostaju unutar iste klase. To znači da je nadjačavanje moguće samo u objektno orijentiranim programskim jezicima koji dopuštaju nasljeđivanje, dok preopterećenje može biti dostupno i u neobjektno orijentiranim jezicima. Drugim riječima, nadjačavate metodu u superklasi, ali preopterećujete metodu unutar vlastite klase.
Još jedna razlika je u tome što nadjačane metode imaju isti naziv metode, potpis metode i tip povrata, ali preopterećene metode moraju se razlikovati ili u potpisu ili tipu povrata (ime treba biti isto). Kako bi se napravila razlika između dvije preopterećene metode, točna vrsta objekta koji se koristi za pozivanje id-a korištenih metoda, dok se za razlikovanje između dvije preopterećene metode koriste vrste parametara. Još jedna ključna razlika je u tome što se preopterećenje rješava tijekom kompajliranja, dok se nadjačavanje rješava tijekom izvođenja.