Java Programozás – Öröklés

Az Objektum Orientált felfogás és a Java Programozás egyik nagy előnye az úgynevezett Öröklés.

 

 

Az Öröklés azt jelenti, hogy egy bizonyos hierarchia alakul ki az Objektumok között. Az öröklésben mindig két végpont van, az Ős és az azt megöröklő Gyerek. A Gyerek megörökli az Ős minden tulajdonságát és tovább bővítheti azokat. Erre a gondolatra egy példa a Négyszög és a Téglalap. Minden Téglalap Négyszög, de nem minden Négyszög Téglalap.

Úgyanúgy mint a valóságban, így az Objektumok között is lehet definiálni ilyen jellegű kapcsolatot, sőt kapcsolati láncokat, ugyanis a Gyerek lehet Őse egy másik Gyereknek is. Sőt egy Ősnek több Gyereke is lehet. Maradva az előző példánál:QuadrangleInheritChain Java Programozas

 

 

Öröklés Előnyei

Mi lehet az előnye az öröklésnek a programozásban?

Ezzel a felfogással nagyon jól szét lehet választani a szerepköröket az Objektumok között, szét lehet osztani a felelősséget. Azonban a szabályokat is nagyon jól meg tudom kötni, hiszen már egészen magas szinten meg tudom mondani, hogy mik azok a tulajdonságok vagy műveletek, amik az öröklési hierarchia minden tagjában meg kell jelenjenek. A legnagyobb előnye mégis az általánosítás, hiszen ezentúl nem kell pontosan megmondanom, hogy melyik Objektumra van szükségem, elég, ha megjelölöm a hierarchia tetején álló Objektum valamelyikét. Például ha egy Négyszög osztálybeli Objektumot várok, akkor kaphatok Négyzetet vagy Téglalapot, mind a kettő Négyszög, tehát mind a kettő megfelelő referencia.

Ez a megközelítés a Projekt munkák során rendkívűl elterjedt, gyakran használt. Sőt, magában a Java nyelvben is rengeteg olyan elem van, amely kihasználja az öröklési láncok nyújtotta előnyöket. Érdemes tisztában lenni az alapokkal, mert egy komplexebb problémában gyorsan a segítségünkre lehet, ezzel időt és pénzt spórolva.

 

Öröklés a Java nyelvben

Maradva a korábbi példánál Négyszögek Kerületét és Területét akarom kiszámolni. Egészen pontosan a Négyzet és a Téglalap kerületére és területére vagyok kíváncsi. Valamint akarok egy külön osztályt, aminek a feladata a Négyszögek kerületének és területének a megjelenítése.

Definiálok tehát egy Ős osztályt, aki jelen példában nem egy igazi osztály, csupán az a célja, hogy közös Ősként szolgáljon a Gyerek osztályoknak. Az ilyen osztályokat a Java-ban Abstract kulcsszóval jelöljük és nem lehet őket példányosítani. Ebben az osztályban definiálom a szükséges függvényeket, íme:

Quadrangle Abstract Class Java Programozas

 

Az Abstract osztályban a metódusokat csak definiálni lehet, valódi implementációt majd a Gyerek osztályban kapnak.

A következő lépés a gyerek osztályok megvalósítása. Ehhez segítséget nyújt az Eclipse is, ugyanis az Ős osztályt, már az adott osztály létrehozásakor is ki tudom jelölni: New -> Class -> Superclass, Browse
Először a Négyzet osztályt hozzuk létre. Definiáljuk benne az oldal hosszát, valamint implementáljuk le a két metódust. Annak érdekében, hogy már akkor meg tudjuk adni a négyzet oldalának hosszát, amikor az osztályt példányosítjuk, definiáljunk egy Egy paraméteres Konstruktort, amiben feltöltjük az osztály belső attribútumát az átadott paraméterrel. A konstruktorok működéséről később lesz szó.

Quadrangle Square Java Programozas

 

Ez után, ehhez nagyon hasonló módon definiálok egy Téglalap osztályt is. Az előzőekhez képest a lényegi eltérés, hogy ebben az esetben már két különböző oldalhosszt kell tárolnom és feltöltenem a konstruktorban.

A feladat lényegi része most következik, amikor definiáljuk a megjelenítő, kiírató osztályt. Ennek egyetlen metódusa lesz, ami paraméterül vár egy Négyszög osztályt. Mivel tudjuk, hogy a Négyszög osztály ismeri a Kerület és Terület számítási metódusokat, ezért ebben az implementációban ezeket már fel tudjuk használni a megjelenítéshez, íme:

Quadrangle Printer Class Java Programozas

 

Nézzük meg, hogyan néz ki most a Main osztályunk:

QuadrangleMain Java Programozas

 

Először létrehozok egy-egy példányt a két Gyerek osztályból valamint egy példányt a megjelenítő osztályból is. Ezután meghívom a megjelenítő osztály metódusát a megfelelő Gyerek osztályokkal. Mivel minden Négyzet és minden Téglalap egyben Négyszög is, ezért a megjelenítő osztály elfogadja ezeket a bemeneti értékeket.

Ez a példa úgy gondolom jól mutatja be az öröklés hatalmas előnyét. Ha az öröklést most nem tudtam volna kihasználni, akkor két külön kiírató metódust kellett volna definiálnom a Megjelenítő osztályban, egyet a Négyzetre, egyet pedig a Téglalapra. Ez egy ekkora példában szemmel láthatóan nem lett volna akkora plusz munka, de egy nagyobb ipari Projektben már komoly gondot tudna okozni.

 

Ha megjött a kedved, akkor nézd meg ezt a feladatot és hagyd meg kommentben a megoldást!

Bajor Tamás - Programozz Te Is!

Szia, Bajor Tamás vagyok, a Programozz Te Is oldal alapítója és oktatója. Köszi, hogy itt vagy és éppen az én cikkem olvasására fordítod a drága idődet! Azért dolgozom minden nap, hogy neked segítsek a programozás világában minél profibban elmélyülni. A cikkek egyetlen írójaként rengeteg munkát és energiát fektetek mind az oldalba, mind pedig az oktatásba!

Arra kérlek, ha tetszett cikk amit olvastál vagy szívesen veszed az ingyenes anyagokat akkor dobj egy Like-ot a Facebook-on, ezzel is támogatva a munkámat. Neked ez egy apró kattintás, nekem pedig hatalmas segítség!