Absztrakt osztály vs interfész
Az absztrakt osztály és az interfész két objektumorientált konstrukció, számos objektumorientált programozási nyelvben, például a Java-ban. Az absztrakt osztály a szokásos (konkrét) osztály absztrakt változatának tekinthető, míg az interfész a szerződés végrehajtásának eszközeként. Az absztrakt osztály olyan osztály, amely nem inicializálható, de kibővíthető. Az interfész olyan típus, amelyet más osztályoknak kell megvalósítaniuk. A Java-ban az absztrakt osztályokat absztrakt kulcsszóval deklarálják, míg az interfész kulcsszavát az interfész meghatározására.
Mi az az elvont osztály?
Általában az absztrakt osztályokat, más néven Absztrakt alaposztályokat (ABC) nem lehet példányosítani (az osztály egy 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ést (az osztály kiterjesztéséből az alosztályok létrehozásának képessége). Az absztrakt osztályok általában elvont fogalmat vagy entitást képviselnek, részleges vagy semmilyen megvalósítással. Ezért az absztrakt osztályok szülőosztályként működnek, amelyekből gyermekosztályok származnak, így a gyermekosztály megosztja a szülőosztály hiányos jellemzőit, és a funkcionalitás hozzáadható azok teljesítéséhez.
Az absztrakt osztályok tartalmazhatnak absztrakt módszereket. Az absztrakt osztályt kiterjesztő alosztályok megvalósíthatják ezeket az (öröklött) absztrakt módszereket. Ha a gyermekosztály az összes ilyen elvont módszert alkalmazza, akkor az konkrét osztály. De ha nem így történik, akkor a gyermekosztály is elvont osztály lesz. Mindez azt jelenti, hogy amikor a programozó egy osztályt absztraktként jelöl, azt mondja, hogy az osztály hiányos lesz, és olyan elemekkel rendelkezik, amelyeket az öröklődő alosztályoknak kell kitölteniük. Ez egy jó módszer két programozó közötti szerződés létrejöttéhez, amely leegyszerűsíti a szoftverfejlesztés feladatait. A programozónak, aki öröklési kódot ír, pontosan követnie kell a módszer definícióit (de természetesen saját megvalósítása is lehet).
Mi az a felület?
Az interfész egy absztrakt típus, amelyet olyan szerződés megadására használnak, amelyet az adott interfészt megvalósító osztályoknak kell végrehajtaniuk. Az interfész kulcsszavával definiálható egy interfész, az Implements kulcsszóval pedig egy interfész osztály általi megvalósításához (Java programozási nyelven). Általában egy felület csak metódus-aláírásokat és állandó deklarációkat tartalmaz. Minden interfésznek, amely egy adott interfészt megvalósít, az összes interfészben definiált módszert végre kell hajtania, vagy absztrakt osztályként kell deklarálni. A Java-ban az objektum-hivatkozás típusa interfész-típusként definiálható. Ennek az objektumnak azonban nullának kell lennie, vagy tartalmaznia kell egy osztály objektumát, amely megvalósítja az adott interfészt. Az Implements kulcsszó használatával a Java-ban több interfészt is megvalósíthat egyetlen osztályban.
Mi a különbség az absztrakt osztály és az interfész között?
Az absztrakt osztályok általában elvont fogalmat vagy entitást képviselnek, részleges vagy semmilyen megvalósítással. Másrészt az interfész egy absztrakt típus, amelyet az osztályok által végrehajtandó szerződés megadására használnak. Az absztrakt osztályokat öröklődni (vagy kibővíteni) kell, míg az interfészeket meg kell valósítani. Az absztrakt osztályok tartalmazhatnak elvont módszereket, míg egy felület csak elvont módszereket tartalmazhat. Az absztrakt osztályok tartalmazhatnak bármilyen változót, 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. Az interfész azonban kiterjesztheti az osztályt.