Jelenlegi hely

2.4. Az öröklődés

Az objektumorientált rendszerekben egyes objektumok között további összefüggéseket figyelhetünk meg. Bizonyos feltételeknek megfelelő objektumok egy másik osztályba sorolhatók. Például a hegyi vagy éppen a városi biciklik a biciklik speciális fajtái. Az objektumorientált szóhasználatban ezeket leszármazott osztálynak nevezzük. Hasonlóan, a bicikli osztály ősosztálya (szülő osztálya, bázisosztálya) a városi biciklik osztályának. Ezt az összefüggést mutatja a következő ábra:

Öröklődés

Az objektumorientált tervezés folyamán használt általánosítás és specializálás fogalmak az osztályhierarchia kialakítása során használatosak. Az őstől a gyermek felé speciálisabb osztályokat látunk, visszafele pedig egyre általánosabbakat.

Minden gyermekosztály örökli az ősosztály állapotát és a metódusait, de nincs ezekre korlátozva. A gyermekosztályok hozzáadhatnak változókat és metódusokat ahhoz, amit az ősosztálytól örökölt. A gyermekosztályok felül tudják írni az örökölt metódusokat, vagy speciálisabb megvalósítást tud adni azoknak.

Például a Hegyi bicikli a Bicikli leszármazottja:

class MountainBike extends Bicycle {
     // új adattagok és metódusok helye
}

Az öröklődésnél nem vagyunk behatárolva egy szintre. Az öröklési fa, vagy más néven az osztályhierarchia több szintű öröklést is lehetővé tesz, bár egy átlagos felhasználói program esetén legtöbbször 4-5 szint elegendő.

Az öröklődés a következő előnyökkel jár:

  • A leszármazott osztályok tudják specializálni az ősosztálytól örökölt viselkedést. Az öröklődés segítségével az egyes osztályokat újra fel lehet használni.
  • A programozók meg tudnak valósítani olyan viselkedéseket, amelyek az ősosztályban még nem voltak konkrétan leírva. (Az ilyen osztályokat absztrakt, elvont osztályoknak nevezzük.) Az absztrakt ősosztályok csak részben valósítják meg a szükséges viselkedéseket, és akár más programozók fogják azt a leszármazottakban megvalósítani.

Megjegyzés: Az objektumorientált szemlélet megismerése után sok fejlesztő számára erős a kísértés, hogy olyankor is az öröklődést alkalmazza, amikor inkább más technikákat (pl. kompozíció, aggregáció) érdemes alkalmazni.

Javában az Object osztály az osztályhierarchia legfelső eleme, minden más osztály belőle származik (közvetlenül vagy közvetve). Az Object típusú referencia bármilyen objektumra tud hivatkozni.

Az Object osztálynak olyan megosztott viselkedései (metódusai) vannak, amelyek lehetővé teszik a Java VM-en való futást. Például minden osztály örökli a toString metódust, hogy az objektum sztringként is megmutatható legyen.