Kulcskülönbség: Az interfész vagy a protokoll egy közös mód, amely lehetővé teszi a független objektumok egymással való kommunikációját. Egy elfogadott viselkedést jelent, amely megkönnyíti a két objektum közötti kölcsönhatást. Az absztrakt osztály olyan objektumosztály, amely nem lehet egy objektum példányát felállítani vagy beállítani. Ennek az osztálynak nincs megvalósítása, vagy hiányos végrehajtása lehet.
A Java programozási nyelv, amelyet a C nyelv befolyásolt. A szintaxis nagy részét C és C ++ képezi, de kevesebb alacsony szintű létesítménye van. A Java egy általános célú programozási nyelv, amely a korábbi nyelvekhez képest kevesebb végrehajtási függőséggel rendelkezik. Ez párhuzamos, osztály-alapú és objektum-orientált nyelv.
A Java-t James Gosling fejlesztette ki a Sun Microsystems-ben, és 1995-ben adták ki. Eredetileg a Sun Microsystems Java platformjának alapelemeként jelent meg. A Sun a Java-technológiák nagy részét a GNU Általános Nyilvános Licenc alapján újra engedélyezte. Ez azt jelenti, hogy a GNU General Public License által licencelt összes technológia nyílt forráskódú, és általában ingyenesen elérhető. A Sun Microsystems végül beolvadt az Oracle Corporation-be. 2012-től a Java az egyik legnépszerűbb programozási nyelv. Ez különösen igaz az ügyfél-szerver webalkalmazásokra. Sok más rendszer kifejlesztette a Sun technológiák alternatív megvalósítását, mint például a GNU Compiler for Java és a GNU Classpath.
Az absztrakt osztály olyan objektumosztály, amely nem lehet egy objektum példányát felállítani vagy beállítani. Ennek az osztálynak nincs megvalósítása, vagy hiányos végrehajtása lehet. Ezenkívül absztrakt módszereket vagy tulajdonságokat is tartalmazhat, amelyeket az összes alosztály megoszt. Egyes programozási nyelvekben az elvont típusok, amelyek nincsenek implementálva, interfészként ismertek. Java-ban egy absztrakt típus hozható létre az „absztrakt” kulcsszó segítségével az osztály meghatározásában. Az absztrakt osztály létrehozásának célja, hogy az elvont osztályban nem végrehajtott összes módszert helyezze el, és hagyja, hogy az alosztály meghatározza, hogyan kell ezeket az osztályokat végrehajtani. Ha egy osztálynak egyetlen absztrakt módszere van, akkor az osztályt elvont osztálynak kell nyilvánítani, bár nem kell legalább egy módszerrel rendelkeznie az osztály absztrakt kimutatására.
Malliktalksjava.in felsorolja az interfész és az absztrakt közötti főbb különbségeket:
- Az absztrakt osztálynak van a kivitelezője, de az interfész nem.
- Az elvont osztályok egyes tagjai számára megvalósíthatók (módszerek), de a kezelőfelület egyik tagjának sem tud végrehajtani.
- Az absztrakt osztályoknak további osztályokat kell használniuk, amelyek haszontalanok lesznek.
- Az interfészeknek más osztályoknak kell végrehajtaniuk azokat, amelyek haszontalanok lesznek
- Csak egy felület képes kiterjeszteni egy másik felületet, de bármelyik osztály egy absztrakt osztályt is kiterjeszthet.
- Az interfészek összes változója alapértelmezés szerint végleges
- Az interfészek többféle örökséget jelentenek. Egy osztály csak egy másik osztályt nyújthat.
- Az interfészek csak olyan nyilvános módszerekre és állandókra korlátozódnak, amelyek nincsenek végrehajtva. Az elvont osztályok részleges végrehajtással, védett részekkel, statikus módszerekkel stb. Rendelkezhetnek.
- Egy osztály több interfészt is megvalósíthat. De elvont osztály esetén az osztály csak egy absztrakt osztályt nyújthat.
- Az interfészek lassúak, mivel extra közvetettséget igényel a megfelelő módszer megtalálásához az adott osztályban. Az absztrakt osztályok gyorsak.
- A hozzáférhetőség módosítója (nyilvános / magán / belső) megengedett az absztrakt osztályhoz. Az interfész nem teszi lehetővé a hozzáférhetőség módosítását
- Az elvont osztály teljes vagy hiányos módszereket tartalmazhat. Az interfészek csak egy módszer aláírását tartalmazhatják, de nem tartalmaznak testet. Tehát egy absztrakt osztály megvalósíthat módszereket, de egy interfész nem tudja megvalósítani a módszereket.
- Egy absztrakt osztály tartalmazhat mezőket, konstruktorokat, vagy destruktorokat és eszköz tulajdonságokat. Egy interfész nem tartalmazhat mezőket, konstruktort vagy destruktort, és csak az ingatlan aláírása van, de nincs végrehajtás.
- Különböző hozzáférési módosítók, mint például absztrakt, védett, belső, nyilvános, virtuális stb. Hasznosak az absztrakt osztályokban, de nem a felületeken.
- Az elvont hatókör a származtatott osztályig terjed.
- Az interfész terjedelme akár az öröklési lánc bármely szintjére is kiterjed.
A táblázat adatai a codeproject.com és a mindprod.com jóvoltából állnak
Felület | Absztrakt osztály | |
Többszörös öröklés | Egy osztály több felületet örökölhet. | Egy osztály csak egy absztrakt osztályt örökölhet. |
Alapértelmezett végrehajtás | Az interfész nem tud kódot adni, csak az aláírást. | Egy absztrakt osztály teljes, alapértelmezett kódot és / vagy csak azokat a részleteket adhatja meg, amelyeket felül kell írni. |
Hozzáférési módosítások | Egy interfész nem rendelkezik hozzáférési módosítókkal az al, funkciók, tulajdonságok stb. Számára. | Egy absztrakt osztály tartalmazhat hozzáférési módosítókat az al, funkciók, tulajdonságok számára. |
Core vs. Peripheral | Az interfészek egy osztály perifériás képességeinek meghatározására szolgálnak. Más szóval mind az ember, mind a jármű örökölhet egy IMovable felületről. | Egy absztrakt osztály meghatározza az osztály azonosságát, és ott használják az azonos típusú objektumokhoz. |
A homogenitás | Ha a különböző implementációk csak a módszer aláírásait osztják meg, akkor jobb az Interfészek használata. | Ha a különböző megvalósítások ugyanolyan jellegűek és közös viselkedést vagy státuszt használnak, akkor az absztrakt osztály jobb használni. |
Sebesség | Több idő szükséges ahhoz, hogy a megfelelő osztályokban megtalálják a tényleges módszert. | Gyors |
Funkció hozzáadása | Ha új módszert adunk az Interfészhez, akkor fel kell tárnunk az interfész összes implementációját, és meg kell határoznunk az új módszer megvalósítását. | Ha új módszert adunk egy absztrakt osztályhoz, akkor lehetőségünk nyílik az alapértelmezett megvalósítás biztosítására, ezért az összes meglévő kód megfelelően működik. |
Mezők és Constants | Az interfészekben nem lehet mezőket definiálni. | Az elvont osztálynak lehetnek mezõi és állandói. |
tömörség | Az interfész állandó deklarációi mindegyike feltételezett nyilvános statikus végleges. | A megosztott kód egy absztrakt osztályba adható. |
állandók | Csak statikus végkonstansok használhatják azokat képesítés nélkül olyan osztályokban, amelyek az interfészt implementálják. | Mind a példány, mind a statikus állandók lehetségesek. A konstansok kiszámításához a statikus és a példány intializáló kód is lehetséges. |
Harmadik fél kényelme | Egy interfész-implementáció hozzáadható bármely létező harmadik osztályhoz. | Egy harmadik fél osztályát újra kell írni, hogy csak az absztrakt osztályból származzon. |
egy-egy-egy viszonylagos vagy teendő | Az interfészeket gyakran használják egy osztály perifériás képességeinek leírására, nem pedig annak központi identitására, pl. Egy autóosztály megvalósíthatja az újrahasznosítható felületet, amely sok más, teljesen független objektumra vonatkozik. | Az elvont osztály meghatározza leszármazottainak alapvető identitását. A megvalósított interfészek felsorolják azokat az általános dolgokat, amelyeket egy osztály képes elvégezni, nem pedig az, amit az osztály egy. Java-kontextusban a felhasználóknak általában inkább a Runnable felületet kell bevezetniük, mint a Thread kiterjesztését, mert nem igazán érdekeltek új Thread funkciók biztosításában, általában csak egy kódot akarnak önállóan futni. Olyan dolgot akarnak létrehozni, amely egy szálban futtatható, nem egy újfajta szál. A hasonló is-a vs. has-a vita akkor jön létre, amikor úgy dönt, hogy örököl vagy delegál. |
Csatlakoztat | A felhasználó egy új csere-modult írhat fel olyan interfészhez, amely nem tartalmaz egyetlen kódot a meglévő implementációkkal közösen. Amikor a felhasználó végrehajtja a felületet, a kezelőfelületről semmilyen alapértelmezett végrehajtás nélkül indul. A felhasználónak más osztályok eszközeit kell beszereznie; semmi nem jön az interfészen kívül, mint néhány konstans. Ez lehetővé teszi a felhasználó számára a radikálisan eltérő belső kialakítás megvalósítását. | A felhasználónak az abszolút osztályt használnia kell a kódbázishoz, az összes kísérő poggyásza, jó vagy rossz. Az absztrakt osztály szerzője a felhasználó számára struktúrát vezetett be. |
Karbantartás | Ha az ügyfél kódja csak egy felület szempontjából beszél, akkor a gyárilag alkalmazott módszer segítségével könnyen megváltoztathatja a mögöttes konkrét megvalósítást. | Ha az ügyfél kódja csak egy absztrakt osztály, akkor a gyárilag alkalmazott módszer segítségével könnyen megváltoztathatja a konkrét megvalósítást. |