Recomandat, 2024

Alegerea Editorului

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

Interfața și clasa Abstract contribuie la "tipul incomplet" în PLO. Uneori avem nevoie de o superclaj pentru a defini "ce să fac", dar nu "cum să faci", este cum să faci o parte vor fi implementate de clasa derivată în funcție de nevoia ei, " interfața " oferă o soluție la acest lucru. Uneori avem nevoie de o clasă superclass care definește o structură generalizată care poate fi implementată de clase derivate și o anumită structură specificată care poate fi utilizată de clasele derivate, " clasa abstractă " oferă o soluție pentru aceasta. Diferența fundamentală dintre interfață și clasa abstractă este că interfața este pe deplin incompletă, iar clasa abstractă este parțial incompletă.

Diagramă de comparație

Bazele comparațieiInterfațăClasa Abstract
De bazăCând cunoașteți doar cerințele și nu implementarea, utilizați "Interface".Când știți parțial despre implementările pe care le folosiți "clase abstracte".
metodeInterfața conține numai metode abstracte.Clasa abstractă conține metode abstracte, precum și metode concrete.
Modificatorul de acces al metodelorMetodele de interfață sunt întotdeauna "publice" și "rezumate", chiar dacă nu declarăm. Prin urmare, se poate spune ca fiind o clasă abstractă de 100%.Nu este obligatoriu ca metoda în 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ătorii modificatori:
Public: privat și protejat
Rezumat: final, static, sincronizat, nativ, strict.
Nu există restricții asupra modificatorilor variabilei clasei abstracte.
Modificatorul de acces al variabilelorAcess Modifier permis pentru variabilele de interfață sunt publice, statice și finale, dacă declarăm sau nu.Variabilele din clasa abstractă nu trebuie să fie publice, statice, finale.
Modificatori restricționați pentru variabileVariabilele interfeței nu pot fi declarate private, protejate, tranzitorii, volatile.Nu există restricții asupra modificatorilor variabilelor clasei abstracte.
Inițializarea variabilelorVariabilele de interfață trebuie să fie inițializate la momentul declarației.Nu este obligatoriu ca variabilele clasei abstracte să fie inițializate la momentul declarației.
Instanță și blocuri staticeÎn interiorul interfeței, nu puteți declara o instanță sau un bloc static.Clasa abstractă permite o instanță sau un bloc static în interiorul acesteia.
constructorilorNu puteți declara constructorul în interiorul interfeței.Puteți declara constructorul într-o clasă abstractă.

Definiția interfață

Java nu permite moștenire multiplă. Aceasta înseamnă că o singură clasă nu poate moșteni mai mult de o clasă la un moment dat. Motivul din spatele acestui lucru poate fi explicat printr-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 și B. Acum, ambele au clasa A și B au setul de metode (), atunci va fi o întrebare pentru clasa C, metoda pe care clasa () trebuie să o moștenească. Soluția la această problemă este "interfața".

Interfața este o clasă pur abstractă. Cuvântul folosit pentru a crea o interfață este "interfața". Deoarece toată metoda din interfață este pe deplin abstractă. Interfața specifică numai ce trebuie să facă o clasă, dar nu definește cum o face. Doar pentru că toată metoda declarată în interiorul interfeței este abstractă, nu este creată nicio instanță pentru o interfață. Forma generală de "interfață" în Java este:

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

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

Nu avem conceptul de "Interface" în C ++. Dar, Java și C # definesc interfața foarte bine.

Interfața în Java:

  • Variabilele unei interfețe sunt, în mod implicit, publice, statice și definitive.
  • Variabilele trebuie inițializate la momentul declarației.
  • Variabilele nu pot fi declarate ca private, protejate, tranzitorii și volatile.
  • Metodele unei interfețe sunt întotdeauna publice și abstracte, în timp ce ele nu pot fi niciodată declarate private, protejate, finale, statice, sincronizate, native și strict.
  • Nu puteți declara niciun constructor în interiorul interfeței deoarece scopul principal al constructorului este inițierea variabilelor de clasă, dar în interfața variabilei sunt inițializate la momentul declarației.
  • 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 la un moment dat și trebuie să implementeze toate metodele tuturor interfețelor moștenite.

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

 class_name_name implementează Interface_name {// class-body} 

Pentru a moșteni o interfață, o clasă utilizează un cuvânt cheie "implementă", iar clasa implementează toată metoda declarată de o interfață moștenită.

Interfața în C #:

Interfața în C # este aproape similară cu interfața din Java, cu excepția:

  • Interfața în C # nu declară variabile.
  • Numele interfeței este prefixată cu o capitală I și este moștenită cu un semn de colon (:).

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

 class_name_name: interface_name {// 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ă" de la începutul declarației de clasă. Deoarece clasa abstractă conține metoda abstractă, ea este de 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ă pună în aplicare toate metodele abstracte ale clasei abstracte, dacă nu, atunci trebuie să fie și ea declarată 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 ea. Dar, nu puteți declara un constructor abstract sau o metodă statică abstractă într-o clasă abstractă. Forma generală a clasei abstracte din Java este după cum urmează:

 clasă abstractă class_name {abstract method_name1 (); abstract method_name2 (); : return_type method_name3 (parametrul_list) {// metode concrete} return_type method_name4 (parameter_list) {// metoda concrete}}; 

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

Diferențe cheie între interfață și clasa abstractă în Java și C #

  1. Când aveți cunoștințele despre "ceea ce este necesar", dar nu despre "modul în care ar fi implementat", atunci interfața trebuie utilizată. Pe de altă parte, dacă știți ce este necesar și știți parțial cum ar fi implementat, utilizați 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, se numește și o clasă abstractă pură. Pe de altă parte, metodele dintr-un abstract nu sunt limitate doar la public și la abstract.
  4. O metodă de interfață nu poate fi niciodată privată, protejată, finală, statică, sincronizată, nativă sau strict. 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, în timp ce nu există o astfel de restricție pentru variabilele unei clase abstracte care să fie doar publică și finală.
  6. Variabilele într-o interfață nu pot fi niciodată private protejate tranzitorii sau volatile, în timp ce nu există restricții la variabile într-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 în orice moment.
  8. În interiorul unei interfețe, o instanță sau un bloc static nu poate fi declarat, dar puteți declara instanță sau un bloc static într-o clasă abstractă.
  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ă creați o clasă de bază care să conțină o formă generalizată de metode care pot fi implementate de clasele derivate în funcție de nevoile lor, conceptul de interfață și clasa abstractă ajută la acest lucru.

Top