Abstraktni razred in vmesnik se uporabljata predvsem za abstrakcijo, vendar se med seboj zelo razlikujeta. Oba sta jedro Jave, vendar imata svojo uporabo. Čeprav sta oba izraza sinonima drug za drugega, ju ni mogoče uporabljati zamenljivo.
Obstajajo velike razlike med obema. Medtem ko je metoda vmesnika privzeto abstraktna, lahko izvleček vsebuje tako abstraktne kot tudi ne-abstraktne metode. No, ker je Java 8, imajo vmesniki tudi izvedbe metod in v Javi imajo lahko tako statične kot privzete metode. Podrobneje preučimo razliko med obema.
Abstraktni razred v Javi je razred, ki je razglašen za abstraktni - lahko vsebuje ali ne vsebuje abstraktnih metod. Je precej podoben vmesniku Java, razen dejstva, da lahko vsebuje privzeto izvedbo metode. Tako kot pri objektno usmerjenem programiranju se tudi abstrakcija v Javi doseže z uporabo abstraktnih razredov in vmesnikov. V Javi abstrakcija pomeni skrivanje nepomembnih podrobnosti od uporabnika, da se osredotoči le na bistvene podrobnosti, da poveča učinkovitost in s tem zmanjša kompleksnost. Ključna beseda "abstrakt" se uporablja za ustvarjanje abstraktnega razreda tik pred ključno besedo razreda v deklaraciji razreda.
Abstraktni razred lahko vsebuje ali ne vsebuje metod abstrakcije (metode brez telesa), če pa ima razred vsaj eno metodo abstrakcije, ga je treba razglasiti za abstrakten. Neastraktne metode pa se lahko uporabljajo tudi samo v abstraktnem razredu, vendar le za izvajanje privzetega vedenja. Metode v abstraktnem razredu imajo lahko modifikatorje dostopa, kot so zasebni, javni, statični in zaščiteni, odvisno od stopnje vidnosti. Abstraktnega razreda ni mogoče izvesti in ne zagotavlja 100-odstotne abstrakcije zaradi dejstva, da ima lahko konkretno metodo.
Čeprav je vmesnik videti kot razred, ni. Ker Java ne podpira več dedovanja, je včasih vmesnik idealen za zagotavljanje baze za hierarhijo razredov. Vmesnik je bolj osnutek razreda, ki se uporablja tudi za doseganje abstrakcije na Javi. Vsebuje abstraktne metode in statične konstante. Preprosto povedano, vmesnik je zbirka abstraktnih metod, ki se uporabljajo za določanje vedenja, ki ga mora razred izvajati. Za razliko od abstraktnega razreda vmesnik zagotavlja popolno abstrakcijo v Javi. Lahko ima tako metode kot spremenljivke, kot razred, vendar so metode, prijavljene v vmesniku, privzeto abstraktne.
Izvleček razreda | Vmesnik |
Abstraktna ključna beseda se uporablja za ustvarjanje abstraktnega razreda in se lahko uporablja z metodami. | Za izdelavo vmesnika se uporablja ključna beseda vmesnika, vendar je ni mogoče uporabiti z metodami. |
Razred lahko razširi samo en abstraktni razred. | Razred lahko implementira več kot en vmesnik. |
Abstraktni razred ima lahko abstraktne in ne-abstraktne metode. | Vmesnik ima lahko samo abstraktne metode. |
Spremenljivke privzeto niso končne. Lahko vsebuje neskončne spremenljivke. | Spremenljivke so privzeto vmesnik. |
Izvleček razreda lahko zagotavlja izvedbo vmesnika. | Vmesnik ne more zagotoviti izvedbe abstraktnega razreda. |
Lahko ima metode z izvedbami. | Omogoča absolutno abstrakcijo in ne more imeti izvedb metod. |
Lahko ima javne, zasebne, statične in zaščitene modifikatorje dostopa. | Metode so v vmesniku Java implicitno javne in abstraktne. |
Ne podpira več dedovanja. | Podpira več dedovanja. |
Idealen je za ponovno uporabo kode in evolucijsko perspektivo. | Idealen je za deklaracijo tipa. |
Za abstrakcijo se uporabljata abstraktni razred in vmesnik; vendar imajo svoj pravičen delež razlik. Glavno razliko med njima poganjajo metode abstrakcije. Medtem ko prvi imajo ali ne smejo imeti abstraktnih metod, so drugi implicitno abstraktni. Abstraktni razred ima lahko abstraktne in ne-abstraktne metode. Nasprotno pa ima lahko vmesnik samo abstraktne metode, torej ne more imeti implementacije, kar preprosto pomeni, da vmesnik ne more imeti neastraktnih metod. Abstraktnega razreda ni mogoče instancirati, kar prepoveduje ustvarjanje predmeta. Po drugi strani je vmesnik morda videti kot razred, vendar ni.