Ključna razlika : Preopterećenje znači imati dvije metode istog razreda s istim imenom i različitim vrstama parametara, dok nadjačavanje znači imati dvije različite metode u istoj klasi s istim vrstama parametara, ali s različitim implementacijama.
Prekoračenje i preopterećenje metoda su dva koncepta ili tehnike koji se koriste u programskim jezicima java. Oba koncepta omogućuju programeru da osigura različite implementacije za metode pod istim imenom. Ovaj članak razlikuje dvije koncepcije programiranja.
Preopterećenje funkcija ili preopterećenje metode omogućuje stvaranje nekoliko metoda pod istim imenom, u istoj klasi, ali se međusobno razlikuju u ulaznom i izlaznom tipu funkcije. Jednostavno se definira kao sposobnost jedne funkcije da obavlja različite zadatke.
U preopterećenju implementacije metoda dijele isto ime jer obavljaju slične zadatke. Također, preopterećenje se smatra polimorfnom u prirodi. Funkcije koje imaju različite implementacije ovise o njihovim specificiranim vrstama argumenata. Obično se povezuje sa statičkim programskim jezicima koji provode provjeru tipa u pozivima funkcija. Također se smatra praktičnim jer omogućuje programeru da napiše nekoliko različitih metoda u istom razredu. Međutim, u preopterećenju izvršnog procesora mijenja se ime svih preopterećenih metoda, što može biti problem.
Nadjačavanje metoda, u objektno orijentiranom programiranju, je značajka koja dopušta podklasi ili podređenoj klasi da pruži specifičnu implementaciju metode koja je već osigurana u jednoj od njegovih nad-klasa ili roditeljskih klasa. Implementacija u potklasi nadjačava ili zamjenjuje implementaciju u roditeljskoj klasi osiguravanjem metode pod istim imenom, istim parametrima ili potpisom i istim povratnim tipom kao metoda u roditeljskoj klasi.
Kod nadjačavanja metoda, funkcije se kodiraju za izvršavanje određenih zadataka u programu. Prekoračenje ovisi o prisutnosti osnovne klase za njezin izgled. Ovdje izvršena funkcija određena je objektom koji se koristi za pozivanje, tj. Ako se objekt roditeljske klase koristi za pozivanje metode, tada će se izvršiti funkcija u roditeljskoj klasi. Preokret je u prirodi polimorfan; pomaže u dizajniranju programa na temelju prvog implicitnog parametra, koji se može riješiti tijekom izvođenja. Postoje neki jezici u Java dopuštaju programer da spriječi metodu da bude nadjačana.
Usporedba između preopterećenja i poništavanja:
preopterećenje | najvažniji | |
definicija | To znači imati metode iste klase pod istim imenom, ali svaka metoda ima različite parametre ili ima iste parametre s različitim vrstama i redoslijedom. | To znači imati pod-klasu s istim metodama pod istim imenom i točno istu vrstu parametara i isti povratni tip kao super klasa. |
Značenje | To znači da više od jedne metode dijele isto ime u istoj klasi, ali imaju drugačiji potpis. | To znači da je metoda osnovne klase ponovno definirana u izvedenoj klasi s istim potpisom. |
Ponašanje | Dodaje ili proširuje ponašanje metoda. | Ona mijenja postojeće ponašanje metode. |
polimorfizam | To je polimorfizam vremena sastavljanja. | To je polimorfizam izvođenja. |
Statička metoda | Statička metoda može biti preopterećena. | Statička metoda se ne može zamijeniti. |
Veza | Statična veza. | Dinamička veza. |
baština | Može ili ne mora zahtijevati nasljeđivanje. | Uvijek zahtijeva nasljedstvo. |
asocijacija | Obično se povezuje sa statičkim programskim jezicima. | Obično je to povezano s objektno orijentiranim programima. |
Potpis | Metode imaju drugačiji potpis. | Metode moraju imati isti potpis. |
Ubrzati | To je brže nego prebrzo. | Spor je u odnosu na preopterećenje. |
klase | Ne zahtijeva više od jedne klase za preopterećenje. | To zahtijeva najmanje dvije klase za preopterećenje. |
nivo | Metode mogu imati bilo koju razinu pristupa. | Metode imaju istu ili široku razinu pristupa. |
Primjer | Class Add { int sum (int a, int b) { return a + b; } int sum (int a) { vrati + 10; } } | Klasa A // Super klasa { void display (int num) { print num; } } // Klasa B nasljeđuje klasu A Klasa B // Podklasa { void display (int num) { print num; } } |