Nadjačavanje u odnosu na preopterećenje
Metoda Nadjačavanje i Preopterećenje metode dva su pojma / tehnike / značajka koja se mogu naći u nekim programskim jezicima. Oba koncepta omogućavaju programeru pružanje različitih implementacija za metode s istim imenom. Nadjačavanje metode omogućava programeru da pruži alternativnu implementaciju unutar podklase metodi koja je već definirana unutar njene super klase. Preopterećenje metoda omogućuje programeru da pruža različite implementacije više metoda s istim imenom (unutar iste klase).
Što je nadjačavanje?
Kao što je gore spomenuto, klasa može proširiti super klasu ili roditeljsku klasu u objektno orijentiranim programskim jezicima. Podređena klasa može imati vlastite metode ili po želji može imati vlastite implementacije metoda koje su već definirane u roditeljskoj klasi (ili jednoj od njegovih velikih roditeljskih klasa). Dakle, kada se dogodi ovo drugo, to se naziva nadjačavanje metode. Drugim riječima, ako podređena klasa pruža implementaciju metodi s istim potpisom i tipom povratka kao metoda koja je već definirana u jednoj od njezinih nadređenih klasa, za tu će se metodu reći da je nadjačana (zamijenjena) implementacijom podređene klase. Dakle, ako u klasi postoji nadjačana metoda, runtime sustav će morati odlučiti koja se metoda koristi. Ovaj se problem rješava gledanjem točne vrste objekta koja 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 tome, ako se koristi objekt podređene klase, tada se koristi implementacija podređene klase. Suvremeni programski jezici poput Java, Eifell, C ++ i Python omogućuju nadjačavanje metoda.
Što je preopterećenje?
Preopterećenje metode značajka je koju pružaju neki programski jezici za stvaranje više metoda s istim nazivom, ali s različitim vrstama ulaza i izlaza. U modernim programskim jezicima kao što su Java, C #, C ++ i VB. NET, ova je značajka dostupna. Možete preopteretiti metodu tako što ćete stvoriti drugu metodu s istim imenom, ali s drugačijim potpisom metode ili drugačijom vrstom povrata (ili oboje). Na primjer, ako imate method1 (type1 t1) i method1 (type2 t2) u istoj klasi, tada su preopterećeni. Tada će sustav morati odlučiti koji će se izvršiti kad bude pozvan. Ova se diferencijacija vrši promatranjem vrste parametara koji su proslijeđeni u metodu. Ako je argument tipa1, tada se poziva prva implementacija, dok ako je tipa2, poziva se druga implementacija.
Koja je razlika između Overriding i Overloading?
Iako se nadjačavanje metode i preopterećenje metoda koriste za pružanje metode s različitim implementacijama, postoje ključne razlike između ove dvije koncepcije / tehnike. Prije svega, subjekti koji prevladavaju metodom uvijek ostaju u različitim razredima, dok subjekti koji preopterećuju metodu ostaju unutar istog razreda. To znači da je nadjačavanje moguće samo u objektno orijentiranim programskim jezicima koji omogućuju nasljeđivanje, dok preopterećenje može biti dostupno i u ne-objektno orijentiranom jeziku. Drugim riječima, metodu nadjačavate u super klasi, ali preopterećujete je u vlastitoj klasi.
Druga je razlika u tome što nadjačane metode imaju isto ime metode, potpis metode i tip povrata, ali preopterećene metode moraju se razlikovati ili u potpisu ili u tipu povrata (naziv bi trebao biti isti). Da bi se razlikovale dvije nadjačane metode, koristi se točan tip objekta koji se koristi za pozivanje korištenih metoda, dok se za razlikovanje dviju preopterećenih metoda koriste tipovi parametara. Druga ključna razlika je u tome što se preopterećenje rješava u vrijeme kompajliranja, dok se nadjačavanje rješava u vrijeme izvođenja.