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

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 11 Mai 2024
Anonim
Diferența dintre interfață și clasa abstractă în Java și C # - Tehnologie
Diferența dintre interfață și clasa abstractă în Java și C # - Tehnologie

Conţinut


Interfața și clasa Abstract contribuie la „tip incomplet” în OOP. Uneori avem nevoie de o superclasă pentru a defini „ce să facem”, dar, nu „cum să facem”, modul în care o parte va fi implementată de clasa derivată în funcție de nevoia sa, „interfață”Oferă o soluție în acest sens. Uneori avem nevoie de o clasă de superclase care definește o structură generalizată care poate fi implementată de clase derivate și de o structură specificată care poate fi utilizată de clasele derivate, "clasa abstractă”Oferă o soluție în acest sens. Diferența fundamentală între interfață și clasa abstractă este că interfața este complet incompletă, iar clasa abstractă este parțial incompletă.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațieInterfațăClasă abstractă
De bazăCând aveți doar cunoștințe despre cerințele nu despre implementarea acesteia, utilizați „Interfață”.Când știți parțial despre implementări, utilizați „clase abstracte”.
metodeInterfața conține doar metode abstracte.Clasa abstractă conține metode abstracte, precum și metode concrete.
Modificator de acces la metodeMetodele de interfață sunt întotdeauna „publice” și „abstracte”, chiar dacă nu declaram. Prin urmare, se poate spune ca 100%, clasă abstractă pură.Nu este obligatoriu ca metoda din clasa abstractă să fie publică și abstractă. Poate avea și metode concrete.
Modificator restricționat pentru metodeO metodă de interfață nu poate fi declarată cu următoarele modificatoare:
Public: privat și protejat
Rezumat: final, static, sincronizat, nativ, strictfp.
Nu există restricții la modificatorii variabilei de clasă abstractă.
Modificator de acces al variabilelorModificatorul de acces permis pentru variabilele Interfeței sunt publice, statice și finale, indiferent dacă declarăm sau nu.Variabilele din clasa abstractă nu trebuie să fie publice, statice, finale.
Modificatori restrânși pentru variabileVariabilele de interfață nu pot fi declarate private, protejate, tranzitorii, volatile.Nu există nicio restricție la modificatorii variabilelor de clasă abstractă.
Inițializarea variabilelorVariabilele de interfață trebuie inițializate în momentul declarației sale.Nu este obligatoriu ca variabilele de clasă abstractă să fie inițializate la data declarației sale.
Instanțe și blocuri staticeÎn interfața, nu puteți declara o instanță sau un bloc static.Clasa abstractă permite o instanță sau un bloc static în interiorul ei.
constructorilorNu puteți declara constructor în interiorul interfeței.Puteți declara constructor în cadrul unei clase abstracte.


Definiția Interface

Java nu permite moștenire multiplă. Adică, o singură clasă nu poate moșteni mai multe clase în același timp. Motivul din spatele acestui lucru poate fi explicat cu un exemplu. Să presupunem că avem două clase părinte, A și B și o clasă derivată C. Clasa derivată C moștenește atât clasele A cât și B.Acum, ambele au clasa A și B au metoda setată (), atunci pentru clasa C va fi o întrebare care este metoda setată () a clasei ar trebui să moștenească. Soluția la această problemă este „interfața”.

Interfața este o clasă abstractă pură. Cuvântul cheie utilizat pentru crearea unei interfețe este „interfață”. Întrucât toate metodele din interiorul interfeței sunt complet abstracte. Interfața specifică doar ce trebuie să facă o clasă, dar nu definește modul în care o face. Doar pentru că toate metodele declarate în interiorul interfeței sunt abstracte, nu este creată nicio instanță pentru o interfață. Forma generală de „interfață” în Java este:


access_specifier interfață interface_name {return-type method-name1 (listă parametri); return-type method-name2 (listă de parametri); tip final-varname1 = valoare; tip final-varname2 = valoare; // ... return-type method-nameN (parametri-listă); tip final-varnameN = valoare; }

Specificatorul de acces este declarat public deoarece clasele trebuie să implementeze interfața.

Nu avem conceptul de „Interfață” în C ++. Dar, Java și C # definesc foarte bine interfața.

Interfață în Java:

  • Variabilele unei interfețe sunt în mod implicit întotdeauna publice, statice și finale.
  • Variabilele trebuie inițializate la data declarației sale.
  • Variabilele nu pot fi declarate niciodată private, protejate, tranzitorii și volatile.
  • Metodele unei interfețe sunt întotdeauna publice și abstracte, în timp ce, ele nu pot fi niciodată declarate ca private, protejate, finale, statice, sincronizate, native și strictfp.
  • Nu puteți declara niciun constructor din interiorul interfeței, deoarece scopul principal al constructorului este inițializarea variabilelor de clasă, dar, în variabilele de interfață sunt inițializate în momentul declarației sale.
  • Interfața poate moșteni alte interfețe, dar clasa care implementează o astfel de interfață trebuie să implementeze metodele tuturor interfețelor moștenite.
  • O clasă poate moșteni mai multe interfețe simultan și trebuie să implementeze toate metodele tuturor interfețelor moștenite.

Forma generală de implementare a unei interfețe în Java:

class class_name implementează Interface_name {// class-body}

Pentru moștenirea unei interfețe, o clasă folosește un cuvânt cheie „implementează”, iar clasa implementează toată metoda declarată de o interfață moștenită.

Interfață în C #:

Interfața în C # este aproape similară cu cea a interfeței în Java, cu excepția:

  • Interfața din C # nu declară variabile.
  • Numele interfeței este prefixat cu majuscule I și este moștenit cu un semn (:).

Forma generală de implementare a unei interfețe în C #:

class class_name: nume_interfață {// class-body}

Definiția Abstract Class

O clasă care conține una sau mai multe metode abstracte se numește clasă abstractă, iar o clasă este declarată abstractă folosind cuvântul cheie „abstract”, precedată de cuvântul cheie „clasă” la începutul declarației de clasă. Deoarece clasa abstractă conține metoda abstractă, ea constituie un tip incomplet. Prin urmare, nu puteți crea obiecte dintr-o clasă abstractă. Ori de câte ori o clasă moștenește o clasă abstractă, ea trebuie să implementeze toate metodele abstracte ale clasei abstracte, dacă nu, atunci trebuie declarată ca abstractă. Atributul abstract este moștenit până la realizarea completă a metodelor abstracte.

Clasa abstractă poate conține, de asemenea, metode concrete care pot fi utilizate de clasa derivată așa cum este. Dar, nu puteți declara un constructor abstract sau o metodă statică abstractă în interiorul unei clase abstracte. Forma generală a clasei abstracte în Java este următoarea:

abstract class class_name {abstract method_name1 (); abstract method_name2 (); : return_type method_name3 (parametru_list) {// metodă concretă} return_type method_name4 (parametru_list) {// metodă concretă}};

Conceptul de clasă abstractă este similar atât în ​​Java cât și în C #. O clasă abstractă este ușor diferită în C ++.

În C ++ dacă o clasă are cel puțin o funcție virtuală, clasa devine o clasă abstractă. În loc de cuvântul cheie „abstract”, cuvântul cheie „virtual” este folosit pentru a declara o metodă abstractă.

  1. Când aveți cunoștințe despre „ceea ce este necesar”, dar nu despre „cum ar fi implementat”, atunci trebuie utilizată interfața. Pe de altă parte, dacă știi ce este necesar și știi parțial cum ar fi implementat, atunci folosește o clasă abstractă.
  2. O interfață are toate metodele sale abstracte, dar, o clasă abstractă are unele metode abstracte și unele metode concrete.
  3. Metodele din interiorul unei interfețe sunt publice și abstracte prin urmare, este de asemenea numită ca o clasă abstractă pură. Pe de altă parte, metodele din rezumat nu sunt restricționate să fie publice și abstracte.
  4. O metodă de interfață nu poate fi niciodată privată, protejată, finală, statică, sincronizată, nativă sau strictfp. Pe de altă parte, nu există restricții la metodele unei clase abstracte.
  5. Variabilele dintr-o interfață sunt publice și finale, indiferent dacă le declarăm sau nu, întrucât nu există o astfel de restricție ca variabilele unei clase abstracte să fie publice și finale.
  6. Variabilele dintr-o interfață nu pot fi niciodată tranzitorii protejate în mod privat sau volatile, în timp ce, nu există nicio restricție la variabilele dintr-o clasă abstractă.
  7. Variabila unei interfețe trebuie inițializată în timpul declarației. Pe de altă parte, variabilele dintr-o clasă abstractă pot fi inițializate oricând.
  8. În interiorul unei interfețe, o instanță sau un bloc static nu pot fi declarate, dar, puteți declara instanță sau bloc static în interiorul unei clase abstracte.
  9. Nu puteți defini constructorul în interiorul unei interfețe, în timp ce, puteți defini constructorul într-o clasă abstractă.

Concluzie:

Când trebuie să creezi o clasă de bază care să conțină o formă generalizată de metode care pot fi implementate de clasele derivate în funcție de nevoia lor, conceptul de interfață și clasa abstractă ajută la acest lucru.