Absztrakt osztály vs interfész
Az absztrakt osztály és az interfész két objektumorientált konstrukció, amelyek számos objektumorientált programozási nyelvben, például a Java-ban megtalálhatók. Az absztrakt osztály egy reguláris (konkrét) osztály absztrakt változatának tekinthető, míg az interfész a szerződés megvalósításának eszköze. Az absztrakt osztály olyan osztály, amely nem inicializálható, de bővíthető. Az interfész egy olyan típus, amelyet más osztályoknak kell megvalósítaniuk. A Java-ban az absztrakt osztályokat az Abstract kulcsszóval deklarálják, míg az interfész kulcsszót az interfész meghatározására használják.
Mi az absztrakt osztály?
Az absztrakt osztályok, más néven Abstract Base Classes (ABC) általában nem példányosíthatók (az osztály példánya nem hozható létre). Tehát az absztrakt osztályoknak csak akkor van értelme, ha a programozási nyelv támogatja az öröklődést (alosztályok létrehozásának képességét egy osztály kiterjesztésével). Az absztrakt osztályok általában egy absztrakt fogalmat vagy entitást képviselnek, részben vagy egyáltalán nem implementálva. Ezért az absztrakt osztályok szülőosztályokként működnek, amelyekből a leszármazott osztályok származnak, így az utódosztály megosztja a szülőosztály hiányos jellemzőit, és funkcionalitást lehet hozzáadni a teljesítésükhöz.
Az absztrakt osztályok tartalmazhatnak absztrakt metódusokat. Az absztrakt osztályt kiterjesztő alosztályok megvalósíthatják ezeket az (öröklött) absztrakt metódusokat. Ha a gyermekosztály az összes ilyen absztrakt metódust megvalósítja, akkor ez egy konkrét osztály. De ha nem, akkor a gyermekosztály is absztrakt osztály lesz. Mindez azt jelenti, hogy amikor a programozó kijelöl egy osztályt absztraktnak, azt mondja, hogy az osztály hiányos lesz, és olyan elemei lesznek, amelyeket az örökös alosztályoknak ki kell egészíteniük. Ez egy jó módja annak, hogy szerződést kössön két programozó között, ami leegyszerűsíti a szoftverfejlesztési feladatokat. A programozónak, aki kódot ír az öröklésre, pontosan követnie kell a metódusdefiníciókat (de természetesen lehet saját implementációja).
Mi az az interfész?
Az interfész egy absztrakt típus, amely egy szerződés megadására szolgál, amelyet az adott interfészt megvalósító osztályoknak kell megvalósítaniuk. Az interfész kulcsszó az interfész definiálására szolgál, az Implements kulcsszó pedig egy interfész osztály általi megvalósítására (Java programozási nyelvben). Általában egy interfész csak metódus-aláírásokat és állandó deklarációkat tartalmaz. Minden interfésznek, amely egy adott interfészt valósít meg, meg kell valósítania az interfészben meghatározott összes metódust, vagy absztrakt osztályként kell deklarálnia. Java-ban az objektumhivatkozás típusa interfésztípusként definiálható. De ennek az objektumnak vagy nullának kell lennie, vagy egy osztály objektumát kell tartalmaznia, amely megvalósítja az adott interfészt. A Java Implements kulcsszó használatával több interfészt implementálhat egyetlen osztályba.
Mi a különbség az absztrakt osztály és az interfész között?
Az absztrakt osztályok általában egy absztrakt fogalmat vagy egy entitást képviselnek, amelynek megvalósítása részleges vagy nem. Másrészt az interfész egy absztrakt típus, amelyet egy olyan szerződés megadására használnak, amelyet az osztályoknak meg kell valósítaniuk. Az absztrakt osztályokat örökölni kell (vagy ki kell terjeszteni), míg az interfészeket implementálni kell. Az absztrakt osztályok absztrakt metódusokat tartalmazhatnak, míg az interfész csak absztrakt metódusokat tartalmazhat. Az absztrakt osztályok bármilyen változót tartalmazhatnak, de az interfészek csak konstansokat definiálhatnak. Egy osztály nem örökölhet egynél több absztrakt osztályból, de több interfészt is megvalósíthat. Egy interfész nem valósíthat meg másik interfészt. Egy interfész azonban kiterjesztheti az osztályt.