Diferența dintre clasa abstractă și interfața în Java

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.

Ce este o clasă abstractă în Java?

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ă.

Ce este o interfață?

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.

Diferența dintre clasa abstractă și interfața în Java

  1. "Moștenire multiplă" de clasă abstractă și interfață în Java - În ciuda faptului că atât clasa abstractă cât și interfața sunt folosite în primul rând pentru abstractizare, ele sunt destul de diferite una de cealaltă. În timp ce o clasă abstractă este o clasă, o interfață este o interfață. Aceasta înseamnă că, în timp ce o interfață poate extinde numai o altă interfață Java, o clasă abstractă poate implementa mai multe moșteniri în Java. Ei bine, Java nu suportă mai multe moșteniri, dar se poate implementa mai multe moșteniri în Java.
  2. "Metoda de tip" de clasă abstractă și interfață în Java - Cea de-a doua diferență majoră dintre cele două este că, în timp ce o interfață poate avea doar metode abstracte, o clasă abstractă poate avea atât metode abstracte, cât și metode non-abstracte. Cu toate acestea, din moment ce Java 8, o interfață poate avea și metode implicite și statice.
  3. "Modificatori de acces" de clasă abstractă și interfață în Java - O clasă abstractă poate avea modificatori de acces public, privat și protejat, totuși metodele unei interfețe sunt implicit publice și abstracte. Nu puteți utiliza nici un alt modifiant de acces cu metode de interfață ".
  4. "Implementarea" clasei Abstract și a Interfeței în Java - O clasă abstractă poate oferi implementarea unei interfețe. O interfață, pe de altă parte, nu poate oferi implementarea unei clase abstracte.
  5. "Cuvânt cheie" de clasă abstractă și interfață în Java- În timp ce cuvântul cheie "abstract" este folosit pentru a declara o abstractă metodă de clasă ca abstract, interfețele sunt totuși o poveste diferită; ele pot avea doar constante publice, statice și declarații de metode.
  6. "Utilizați" clasa abstractă și interfața în Java - În timp ce o interfață este ideală pentru declarația de tip, o clasă abstractă este cea mai potrivită pentru reutilizarea codului și perspectiva evoluției. O interfață arată ca o clasă, dar nu este o clasă.
  7. "Fiabilitatea" clasei Abstract și Interface în Java- O altă diferență majoră între o clasă abstractă și o interfață este aceea că prima este puțin mai rapidă decât cea din urmă, deoarece o căutare este de obicei implicată într-o interfață înainte ca orice metodă suprascrisă să fie apelată în Java.
  8. "Variabilele finale" ale clasei Abstract și interfeței în Java - Variabilele declarate într-o interfață sunt definitive în mod implicit, în timp ce o clasă abstractă poate sau nu să conțină variabile non-finale.

Clasa Abstract vs. Interfață în Java: Tabelul de comparație

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.

Punctele sumare despre clasa abstractă și interfața în Java

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.