( sz332 | 2018. 05. 04., p – 20:12 )

Mert tök másra való a kettő. Az interface gyakorlatilag egy szerződést ír le. Aki megvalósítja az adott interface-t, az garantáltan
bír az interfaceben deklarált metódusokkal. Ez a szép és tiszta dolog.

Az absztrakt osztály egy olyan osztály, amiből nem lehet példányosítani, viszont vannak bizonyos metódusai, amiket a belőle származó
osztályok megvalósítanak.

Bizonyos nyelvekben nincs többszörös öröklődés, viszont lehetőség van több interface-t is megvalósítani.

Mire használjuk? Teljesen másra.

Ha interface helyett konkrét osztályokkal dolgoznál, akkor teljesen hozzá vagy kötve az osztály implementációjához. Az interface az ez ellen
véd. Ha én egy listán végig akarok iterálni, akkor baromira nem érdekel, hogy az most láncolt lista, vagy arraylist, vagy micsoda. Nekem elég
az interface, a többit meg oldja meg az osztály maga belül. Aztán ha az én kódomat használó láncolt lista helyett mégiscsak arraylist-et akar
átadni, a kódom továbbra is működni fog.

Absztrakt osztály esetén már van kód, de azt akarom, hogy egy bizonyos rész cserélhető legyen. Ilyenkor leszármaztatok az ősosztályból, és a
plusz kódot ott fogom implementálni. Igy nem kell duplikálnom az erdeti kódot mindkét osztályba (most más kérdés, hogy ezt máshogy is meg tudtam volna tenni).

De! Ezeket a kérdéseket miért nem a facebook-on teszed fel a programozók csoportban? Mert inkább oda lenne való.