Clasă abstractă vs interfață: diferențele și asemănările

Publicat: 2021-06-02

Dacă ești la un interviu de inginerie software, singura întrebare la care te poți aștepta să vină în calea ta este – diferențele și asemănările dintre Abstract Class și Interface.

Clasele și interfețele abstracte sunt blocurile fundamentale în programarea orientată pe obiecte. Ambele le permit programatorilor să implementeze unul dintre cele mai esențiale concepte ale OOP - Abstracția. În timp ce clasele abstracte și interfețele sunt ambele folosite pentru a implementa conceptul de abstractizare, cele două sunt diferite în implementare și au cazuri de utilizare diferite. Clasele și interfețele abstracte ar putea părea similare cu un începător, dar nu pot fi folosite interschimbabil.

În acest articol, vom analiza nuanțele claselor abstracte, interfețelor și asemănările și diferențele dintre cele două. Rețineți că Abstract Class and Interface este doar un concept și poate fi implementat în orice limbaj de programare orientată pe obiecte la alegere. Pentru coerență, orice sintaxă pe care o folosim în acest articol pentru a vă explica conceptele va fi Java.

Până la sfârșitul acestui articol, puteți distinge clar între clasele abstracte și interfețele și care să implementați pentru cazuri specifice.

Cuprins

Interfețele – Ce sunt acestea?

O interfață în POO poate fi înțeleasă pur și simplu ca un contract comportamental între diverse sisteme. Acest lucru înseamnă că orice clasă care implementează o interfață trebuie să ofere o anumită implementare pentru toate metodele interfeței.

Toate metodele dintr-o interfață trebuie să fie publice și abstracte. Prin urmare, interfețele sunt, de asemenea, înțelese ca clase „pur abstracte”.

Definiția interfețelor arată astfel:

interfață publică Mâncare{

public void mestecat();

public void digerare();

}

După cum puteți vedea, definiția include adăugarea numelui cu interfața de cuvinte cheie . Mai mult, două metode publice abstracte au fost definite sub această interfață – deci, clasa care implementează interfața de mai sus va trebui să furnizeze implementarea chewing() și digesting(); funcții.

Acum să ne uităm la ce sunt clasele abstracte și apoi vom aduce ambele concepte împreună, astfel încât să aveți o mai bună claritate a asemănărilor și diferențelor lor.

Clasele de abstracte - Ce sunt acestea?

Cuvântul cheie abstract prefixează întotdeauna o clasă abstractă în declarația sa. Mai mult, clasele abstracte acționează ca linii directoare create pentru clasele lor derivate non-abstracte. În acest sens, ei trebuie să aibă cel puțin o metodă abstractă în declarația lor, oferind, de asemenea, implementarea adecvată pentru metodele sale non-abstracte.

Iată cum arată definiția claselor abstracte:

curs public abstract Mâncat{

public void getReady(){

System.out.println(„Sunt pregătit să mănânc”);

}

public abstract void start();

public abstract void stop();

}

După cum puteți vedea în definiția clasei abstracte, funcția getReady() este una non-abstractă, în timp ce start(); și stop(); funcțiile sunt abstracte.

Când vine vorba de implementarea claselor abstracte, există câteva reguli de care ar trebui să fii conștient:

  • Clasele abstracte nu pot fi instanțiate. Asta înseamnă că nu putem crea obiecte din nicio clasă abstractă.
  • Orice clasă copil care va extinde clasa abstractă trebuie să implementeze toate metodele abstracte descrise în clasa abstractă. Dacă clasa copil nu implementează toate metodele abstracte, clasa copil ar trebui să fie declarată și ca o clasă abstractă.

Acum că avem elementele de bază ale interfețelor și ale claselor abstracte, să vorbim despre cum diferă, asemănările lor și când ar trebui să folosim ce abordare.

Diferențele și asemănările între interfețe și clasele abstracte

Toate metodele declarate în interiorul unei interfețe sunt implicit publice și abstracte – în timp ce clasele abstracte pot avea tot felul de modificatori pentru metodele lor – de la parțial, public, static, protejat și altele.

În plus, orice clasă definită de utilizator poate implementa mai mult de o interfață. Cu toate acestea, ei pot implementa doar o singură clasă abstractă. Atât Interfețele, cât și Clasele Abstracte pot avea metode și variabile, dar niciuna dintre ele nu poate fi instanțiată. Toate variabilele declarate în interfață sunt finale. Totuși, variabilele declarate în Clasele abstracte pot fi nefinale și pot fi modificate de clasele definite de utilizator.

Iată un rezumat al tuturor diferențelor cheie dintre o clasă abstractă și o interfață.

Parametru Clasele de abstracte Interfețe
Cuvânt cheie este folosit cuvântul cheie abstract . este utilizat cuvântul cheie interfață .
Tipul de variabile Poate gestiona variabile finale, non-finale, statice și non-statice. Poate avea doar variabile statice și finale definite implicit.
Variabile finale Poate sau nu să aibă variabile finale declarate în cadrul acestuia. Variabilele sunt declarate implicit ca finale
Modificatori de acces Poate avea toți oricare dintre modificatorii – privat, public, static etc. Poate avea doar modificatorul de acces public.
Tipuri de metode Poate avea atât metode abstracte, cât și non-abstracte. Poate avea doar metode abstracte.
Viteză Rapid Încet, deoarece necesită o indirectă suplimentară.

Clasă abstractă vs interfață: când să alegi pe care?

Dacă aveți nevoie de o clasă de bază pentru furnizarea unor implementări în codul dvs. - o clasă abstractă este calea de urmat. De exemplu, ați putea dori să inițializați câteva variabile într-o clasă pentru a efectua o acțiune logică într-o metodă pe care o pot folosi toate clasele derivate. Într-un astfel de scenariu, utilizarea unei clase abstracte este cel mai bun pariu.

Cu toate acestea, dacă trebuie să furnizați un comportament suplimentar pentru clasele dvs., atunci ar trebui să optați pentru interfețe. În realitate, atât interfețele, cât și clasele abstracte vă vor oferi aceeași funcționalitate. Cu toate acestea, diferența intervine atunci când luați în considerare standardele de codare. Interfețele vă ajută să obțineți abstractizare și polimorfism - două principii importante ale POO. De asemenea, vă permite să păstrați codul cuplat liber în loc să fie strâns cuplat.

Să rezumam acum cazurile de utilizare ale Interfețelor și Claselor Abstracte!

Când să folosiți interfețele?

O interfață permite programatorilor să construiască modele comportamentale suplimentare pentru clasele lor. Permite cuiva să înceapă de la zero și să implementeze interfața în orice clasă dorește. Scopul interfeței este, prin urmare, incidental - ceva care trebuie adăugat la cod. Deci, în cazurile în care doriți să furnizați funcționalități suplimentare claselor și nu vă deranjează să expuneți metodele interfeței dvs. (deoarece toate metodele vor fi publice), ar trebui să continuați cu o implementare a interfeței.

Când să folosiți clasele abstracte?

Spre deosebire de interfețe, clasele abstracte oferă mult mai multă structură. Clasele abstracte vin cu implementări implicite ale unor metode și chiar oferă instrumente utile pentru implementarea completă a clasei abstracte. Ar trebui să utilizați Clasele abstracte pentru a oferi unele funcționalități comune într-un set de clase înrudite, lăsând totodată suficient spațiu pentru implementările implicite ale metodelor.

Învață Cursuri de dezvoltare software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

În concluzie

Abstracția este o componentă crucială a POO, iar atât Clasele Abstracte, cât și Interfețele vă permit să obțineți un anumit grad de abstractizare în codul dvs. Cu toate acestea, folosirea acestora în mod interschimbabil fără a cunoaște avantajele și dezavantajele este o greșeală și poate face ca codul dvs. (și, în cele din urmă, software-ul) să fie defectuos și întârziat.

Sperăm că acest articol v-a ajutat să înțelegeți diferențele cruciale dintre clasele abstracte și interfețe, împreună cu unele cunoștințe sintactice și unde sunt implementate.

Dacă sunteți interesat să aflați mai multe despre Clasele și interfețele abstracte , consultați programul Executive PG de la upGrad și IIIT-B în Dezvoltare software full-stack, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de instruire riguroasă, peste 9 proiecte și sarcini. , Statut de absolvenți IIIT-B, proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Dacă încă sunteți confuz cu privire la nuanțe, vă rugăm să ne lăsați un comentariu mai jos și vă vom reveni în curând!

Ce este o clasă abstractă în Java?

Clasa abstractă este o clasă care nu poate fi instanțiată și nu poate fi moștenită. Nu are operații semnificative în sine și acționează doar ca o superclasă pentru clasele concrete. Este folosit doar pentru a oferi specializare. Luați în considerare exemplul clasei Car și subclasele sale mașini sport și hatchback. Clasa abstractă Car poate fi considerată ca clasa părinte pentru toate subclasele.

Când să folosiți o clasă abstractă în Java?

Scopul principal al clasei abstracte este de a oferi clasa de bază pentru un grup de clase similare. Toate clasele care extind o clasă abstractă trebuie să implementeze metodele definite în clasa lor abstractă. Clasele abstracte sunt utilizate în principal pentru a defini o anumită interfață pe care clasa este de așteptat să o implementeze. clasa abstractă poate fi folosită ca super clasă în care putem defini metode și metodele necesare pot fi implementate în clasa copil și pot fi moștenite de clasa copil. Folosind clasa abstractă, putem defini codul comun care poate fi folosit de clasa copil, ceea ce îl face mai eficient.

Care sunt diferențele dintre o clasă abstractă și o interfață în Java?

Clasa abstractă și interfața sunt cele două moduri de a defini o clasă care conțin unele, dar nu toate metodele de implementat de clasă. Aceste două sunt static diferite și realizate diferit. Dar în ceea ce privește utilizarea dinamică, acestea sunt aceleași. O interfață este doar o clasă care conține doar constante și declarații abstracte de metodă. Nu există o implementare reală a interfeței în Java. Deci interfețele sunt clase complet false. Interfețele sunt folosite pentru a defini contractele de metode și constante din clasă. Va forța clasa să implementeze aceleași metode și constante. Metoda poate fi implementată fie în clasă abstractă, fie în subclase. Clasa abstractă este o clasă care conține metode abstracte. Subclasele implementează acele metode abstracte. Clasa abstractă și interfața pot fi utilizate împreună pentru a aplica anumite contracte din clasă.