Mire használjuk a felülírást a Javaban?
Sziasztok. Sok videót, anyagot megnéztem már, de nem esik le, hogy minek van szükség metódus felülírásra?
#overriding #overloading valaki elmagyarázza pls?
"Overrinding" amikor egy virtualis függvényt (Javaban csa egy függvényt) a leszarmaztatott osztályokban újra definiálsz, mert más viselkedése kell hogy legyen.
"overloading": az amikor több függvénynek)(egy osztalyhierarchian belül) ugyanaz a neve, csak a paraméterlistajuk különbözik.
Ha egy metódusnak
- egyszer ilyen típusú, egyszer más típusú paramétert szeretnél átadni
- egyszer ennyi, másszor annyi paramétert szeretnél átadni
- változhat a visszatérési érték típusa
akkor overloadingot kell alkalmaznod.
A JVM a paraméterlistából (szignatúra) fogja tudni, melyik függvényt szeretnéd meghívni.
Nem csak a Javaban használják. Arra jó, hogy egy általánosabb osztály valamilyen tevékenységét leszármaztatáskor specializálni tudd.
Például van egy sajt nevű osztályod, ami többek között le tud lejárni. Ebből többféle sajtot leszármaztatsz, mert kis különbségek vannak köztük, de alapvetően hasonlóak. Az egyik viszont az idő múlásával nem megromlik, hanem egyre jobb lesz, úgyhogy az ős sajt osztály adott metódusát felülírod, mert annak az egy leszármazott osztálynak a példányai kicsit másképp viselkednek. Ettől még teljesen egységesen kezelhetők, az ős osztály marad, nincs új metódus, szóval a progiban nem kell máshogy kezelni ezt a fajta sajtot.
Override úgy működik, hogy a metódus ugyanazt a nevet használja, de az argumentumai eltérnek, ez alapján dönti el a fordító hogy melyiket kell meghívnia. Gyakorlati haszna ennek akkor van, ha nem akarod if ekkel(és opcionális argumentumokkal) telepakolni a metódusaidat teljesítmény\karbantarthatóság szempontjából.
Overload meg egy metódus felülírása a származtatott osztályban.
Jellemzően pl van a szülő osztályodnak egy Init metódusa amiben a változóidnak értéket adsz, a szülő osztálynak fogalma sincs a származtatott osztály változóiról, muszáj ezt a származtatott osztályban megoldanod, erre egyszerű megoldás lehet a metódus felülírása.
..Gondolkodtam egy ideig, és nem jutott jobb eszembe. :)
Annyit még hozzátennék (bocsi, ha már írta valaki), hogy azt is megteheted, hogy pl. az ős sajt osztály lejáratot kezelő metódusát üresen hagyod, és csak az egyes leszármazott osztályokban írod meg, mindegyiket az adott sajthoz igazítva. Ilyenkor tuképpen csak a sajtok közös interfészét adtad meg, hogy egységesen lehessen kezelni őket, és utána egyedileg imlementálod. (Hát igen, biztos lenne jobb példa is.)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!