Clasa abstractă și interfața ambele sunt folosite în primul rând pentru abstractizare, totuși acestea sunt foarte diferite una de cealaltă. Ambele sunt parte integrantă a Java, dar au propriile lor aplicații. În timp ce ambii termeni pot fi sinonime între ele, ele nu pot fi folosite interschimbabil.
Există diferențe semnificative între cele două. Deși o metodă de interfață este abstractă în mod implicit, un rezumat poate conține atât metode abstracte, cât și metode non-abstracte. Ei bine, din moment ce Java 8, interfețele au și implementări de metode și pot avea atât metode statice, cât și metode implicite în Java. Să studiem diferența dintre cele două în detaliu.
O clasă abstractă în Java este o clasă care este declarată abstractă - poate sau nu să conțină metode abstracte. Este destul de similar cu o interfață Java, cu excepția faptului că poate conține o implementare implicită a metodei. Ca și în programarea orientată pe obiecte, abstractizarea în Java este realizată folosind clase și interfețe abstracte. În Java, abstractarea înseamnă ascunderea detaliilor irelevante de la utilizator pentru a se concentra doar pe detaliile esențiale pentru a crește eficiența, reducând astfel complexitatea. Cuvântul "abstract" este folosit pentru a crea o clasă abstractă chiar înainte de cuvântul cheie din clasă în declarația de clasă.
O clasă abstractă poate sau nu să conțină metode de abstractizare (metode fără corp), dar dacă o clasă are cel puțin o metodă de abstractizare, ea trebuie declarată abstractă. Cu toate acestea, metodele non-abstract pot fi folosite numai într-o clasă abstractă, dar numai pentru a implementa un comportament implicit. Metodele dintr-o clasă abstractă pot avea modificatori de acces, cum ar fi privat, public, static și protejat, în funcție de nivelul de vizibilitate. O clasă abstractă nu poate fi instanțiată și nu oferă o abstractizare de 100% din cauza faptului că poate avea o metodă concretă.
O interfață, deși arata ca o clasă, nu este. Deoarece Java nu suportă mai multe moșteniri, o interfață uneori este ideală pentru a oferi o bază pentru ierarhia de clasă. O interfață este mai mult o schemă a unei clase care este de asemenea folosită pentru a realiza abstractizarea în Java. Conține metode abstracte și constante statice. În termeni simpli, o interfață este o colecție de metode abstracte care este utilizată pentru a specifica un comportament pe care clasa trebuie să îl implementeze. Spre deosebire de clasa abstractă, o interfață oferă abstracție completă în Java. Poate avea ambele metode și variabile la fel ca o clasă, totuși metodele declarate în interfață sunt în mod implicit abstracte.
Clasa abstractă | Interfață |
Cuvântul cheie abstract este folosit pentru a crea o clasă abstractă și poate fi folosit cu metode. | Cuvântul cheie pentru interfață este folosit pentru a crea o interfață, dar nu poate fi folosit cu metode. |
O clasă poate extinde o singură clasă abstractă. | O clasă poate implementa mai multe interfețe. |
O clasă abstractă poate avea atât metode abstracte, cât și metode non-abstracte. | O interfață poate avea doar metode abstracte. |
Variabilele nu sunt definitive în mod implicit. Poate conține variabile non-finale. | Variabilele sunt definitive în mod implicit într-o interfață. |
O clasă abstractă poate oferi implementarea unei interfețe. | O interfață nu poate oferi implementarea unei clase abstracte. |
Poate avea metode cu implementări. | Oferă abstracție absolută și nu poate avea implementări de metode. |
Poate avea modificatori de acces public, privat, static și protejat. | Metodele sunt implicit publice și abstracte în interfața Java. |
Nu suportă moșteniri multiple. | Acceptă moșteniri multiple. |
Este ideal pentru reutilizarea codului și perspectiva evoluției. | Este ideal pentru declarația de tip. |
Atât clasa abstractă cât și interfața sunt folosite pentru abstractizare; cu toate acestea, ei au cota lor echitabilă de diferențe. Principala diferență dintre cele două este determinată de metodele de abstractizare. În timp ce prima poate sau nu poate avea metode abstracte, aceasta din urmă este implicit abstractă. O clasă abstractă poate avea atât metode abstracte, cât și metode non-abstracte. O interfață, pe de altă parte, poate avea doar metode abstracte, astfel încât acestea nu pot avea implementare, ceea ce înseamnă pur și simplu că o interfață nu poate avea metode ne-abstracte. O clasă abstractă nu poate fi instanțiată care interzice crearea unui obiect. O interfață, pe de altă parte, poate arăta ca o clasă, dar nu este.