"Helló, Amigo! Végre valami igazán érdekeshez érkeztünk. Ma a többszörös öröklődésről fogok mesélni . A többszörös öröklődés valóban egy nagyon lenyűgöző és hatékony eszköz. És ha nem lenne több probléma, akkor a Java támogatná az osztályok többszörös öröklését. De nem, ezért meg kell elégednünk az interfészek többszörös öröklésével . Ami szintén nagyon fantasztikus."

Több interfész öröklése – 1

Képzeld el, hogy számítógépes játékot írsz. A karaktereinek (az Ön tárgyainak) pedig nagyon összetett módon kell viselkedniük: járkálnak a térképen, gyűjtsenek tárgyakat, hajtsanak végre küldetéseket, kommunikáljanak más karakterekkel, megöljenek valakit, megmentsenek valakit. Tegyük fel, hogy sikerült az összes objektumot 20 kategóriába sorolni. Ez azt jelenti, hogy ha szerencséd van, csak 20 osztállyal tudod meghatározni az objektumokat. De itt van a csapás: hány egyedi interakciós formája lesz ezeknek az objektumoknak? Minden típusú objektum egyedi interakciót folytathat 20 másik típusú objektummal (az azonos típusú objektumokkal való interakciókat is számoljuk). Más szóval, kódot kell írnia 20 x 20 = 400 interakcióhoz! Ha pedig az egyedi objektumtípusok száma nem 20, hanem 100, akkor az interakciók száma akár 10 000 is lehet!

"Hűha! Most már értem, miért olyan nehéz munka a programozás."

"Egyszerű. A sok absztrakciónak köszönhetően. És nem kis hála az interfészek többszörös öröklődésének."

Gyakran egyszerűsíthetjük az objektumok interakcióját, ha a szerepek és/vagy képességek hatnak egymásra, nem pedig maguk az objektumok. És mint már tudjuk, képességek könnyen hozzáadhatók egy osztályhoz, ha valamilyen interfészt implementál.

Nagy program írásakor a fejlesztők általában a kezdetektől fogva ezt teszik:

1) Azonosítsa az összes képességet/szerepet.

2) Határozza meg e szerepek közötti interakciót.

3) Ezután egyszerűen rendeljen szerepeket az összes osztályhoz.

– Talán egy példa?

"Természetesen. Nézzük a "Tom és Jerry" rajzfilm szerepeit.

Java kód Leírás
interface Moveable
{}
— Szerep/mozgásképesség.
interface Eatable
{}
— Szerep/képesség.
interface Eat
{}
— Szerep/képesség valakit megenni.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom egy macska, akinek három szerepe van:
1) tud mozogni
2) meg tud enni valakit
3) megeheti valaki (egy kutya)
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry egy egér, akinek két szerepe van:
1) tud mozogni
2) valaki megeheti
class Killer extends Dog implements Moveable, Eat
{}
A gyilkos egy kutya, akinek két szerepe van: 1) tud mozogni 2) meg tud enni valakit

Ha csak ezt a három szerepet (interfészt) ismeri, írhat egy programot, és leírhatja a szerepek közötti helyes interakciót. Például egy tárgy üldözni fogja (a mozgatható felületen keresztül) az «akit megehet» után, és elfut az «aki meg tud enni» elől. És mindezt anélkül, hogy tudnának konkrét tárgyakról. Ha további objektumokat (osztályokat) ad hozzá a programhoz, és megtartja ezeket a szerepeket, akkor is szépen fog működni, szabályozva az objektumok viselkedését.