Diferència entre interfície i classe abstracta de Java i C #

Autora: Laura McKinney
Data De La Creació: 1 Abril 2021
Data D’Actualització: 11 Ser Possible 2024
Anonim
Diferència entre interfície i classe abstracta de Java i C # - Tecnologia
Diferència entre interfície i classe abstracta de Java i C # - Tecnologia

Content


La classe d'Interfície i la Resum contribueixen a un tipus "incomplet" en OOP. De vegades necessitem una superclasse per definir “què fer”, però no “com fer-ho”, la forma de fer la part serà implementada per la classe derivada segons les seves necessitats, “interfícieProporciona una solució per a això. De vegades necessitem una classe de superclasse que defineixi alguna estructura generalitzada que pugui ser implementada per classes derivades i alguna estructura especificada que puguin ser utilitzades per les classes derivades, "classe abstracta”Ens proporciona una solució. La diferència fonamental entre la interfície i la classe abstracta és que la interfície està completament incompleta i la classe abstracta és parcialment incompleta.

  1. Gràfic de comparació
  2. Definició
  3. Diferències claus
  4. Conclusió

Gràfic de comparació

Bases per a la comparacióInterfícieClasses abstractes
BàsicQuan només teniu coneixement dels requisits no relatius a la seva implementació, utilitzeu "Interfície".Quan pargueu parcialment de les implementacions, utilitzeu "Classes abstractes".
MètodesLa interfície només conté mètodes abstractes.La classe abstracta conté mètodes abstractes i mètodes concrets.
Modificador d'accés als mètodesEls mètodes d'interfície són sempre "públics" i "abstractes", fins i tot si no declarem. Per tant, es pot dir com un 100%, pura classe abstracta.No és obligatori que el mètode en classe abstracte sigui públic i abstracte. També pot tenir mètodes concrets.
Restringit modificador de mètodesNo es pot declarar un mètode d'interfície amb els modificadors següents:
Públic: privat i protegit
Resum: final, estàtic, sincronitzat, natiu, strictfp.
No hi ha restriccions en els modificadors de la variable de classe abstracta.
Modificador d'accés de variablesEl modificador d’accés permès per a les variables d’interfície són públiques, estàtiques i finals, estiguem declarant o no.Les variables de la classe abstracta no han de ser públiques, estàtiques i finals.
Modificadors restringits per a les variablesLes variables d'interfície no es poden declarar privades, protegides, transitòries, volàtils.No hi ha restriccions als modificadors de variables de classe abstractes.
Inicialització de variablesLes variables d’interfície s’han d’inicialitzar en el moment de la seva declaració.No és obligatori que les variables de classe abstractes s'hagin d'inicialitzar en el moment de la seva declaració.
Bloques d’instància i estàticaA la interfície interior, no es pot declarar una instància o bloc estàtic.La classe abstracta permet una instància o bloc estàtic dins d'ella.
ConstructorsNo es pot declarar constructor a la interfície.Podeu declarar constructor dins d'una classe abstracta.


Definició d'Interfície

Java no permet l'herència múltiple. És a dir, una sola classe no pot heretar més d’una classe alhora. La raó d'aquest motiu es pot explicar amb un exemple. Suposem que tenim dues classes pare, A i B i una classe derivada C. La classe C derivada hereta tant les classes A com B.Ara, ambdues tenen la classe A i B han establert el mètode (), llavors per a la classe C serà una pregunta el que hauria d'heretar el mètode set () de la classe. La solució a aquest problema és "interfície".

La interfície és una classe abstracta pura. La paraula clau que s’utilitza per crear una interfície és “interfície”. Com tot el mètode de la interfície són totalment abstractes. La interfície només especifica què ha de fer una classe però, no defineix com ho fa. Només perquè tots els mètodes declarats a la interfície són abstractes, no es crea cap instància per a una interfície. La forma general de "interfície" de java és:


access_specifier interfície interface_name {mètode de retorn tipus-nom1 (llista de paràmetres); return-type-method2 name2 (llista de paràmetres); tipus final-varname1 = valor; tipus final-varname2 = valor; // ... return-type method-nameN (llista de paràmetres); tipus final-varnameN = valor; }

L’especificador d’accés es declara públic perquè les classes han d’implementar la interfície.

No tenim el concepte de "Interfície" en C ++. Però, Java i C # defineixen molt bé la interfície.

Interfície en Java:

  • Per defecte, les variables d'una interfície són sempre públiques, estàtiques i finals.
  • Les variables s’han d’inicialitzar en el moment de la seva declaració.
  • Les variables mai no poden ser declarades privades, protegides, transitòries i volàtils.
  • Els mètodes d'interfície són sempre públics i abstractes, mentre que, mai no poden ser declarats privats, protegits, finals, estàtics, sincronitzats, nadius i estrictes.
  • No es pot declarar cap constructor dins de la interfície com a principal finalitat del constructor és la inicialització de les variables de classe, però, en les variables d’interfície s’inicialitzen en el moment de la seva declaració.
  • La interfície pot heretar altres interfícies, però, la classe que implementa aquesta interfície ha d’implementar els mètodes de totes les interfícies heretades.
  • Una classe pot heretar més d’una interfície alhora, i ha d’implementar tots els mètodes de totes les interfícies heretades.

La forma general d'implementar una interfície en Java:

class class_name implementa nom Interfície {// class-body}

Per heretar una interfície, una classe utilitza una paraula clau "implementes" i la classe implementa tot el mètode declarat per una interfície heretada.

Interfície en C #:

La interfície en C # és gairebé similar a la interfície de Java, excepte:

  • La interfície en C # no declara variables.
  • El nom de la interfície està prefixat amb majúscula I i s'hereta amb un signe de dos punts (:).

La forma general d'implementar una interfície en C #:

nombre de classe de classe: nom_interfície {// classe-cos}

Definició de classe abstracta

Una classe que conté un o més mètodes abstractes s'anomena classe abstracta i una classe es declara abstracta mitjançant la paraula clau "abstracte", precedida de la paraula clau "classe" al començament de la declaració de classe. Com que la classe abstracta conté el mètode abstracte, constitueix un tipus incomplet. Per tant, no podeu crear objectes d'una classe abstracta. Sempre que una classe hereti una classe abstracta, ha d’implementar tots els mètodes abstractes de la classe abstracta si no és així, també s’ha de declarar abstracta. L’atribut abstracte s’hereta fins que s’aconsegueixi la implementació completa dels mètodes abstractes.

La classe abstracta també pot contenir mètodes concrets que puguin ser utilitzats per la classe derivada. Però, no es pot declarar un constructor abstracte o un mètode estàtic abstracte dins d’una classe abstracta. La forma general de la classe abstracta de Java és la següent:

abstract class class_name {abstract method_name1 (); abstract method_name2 (); : return_type method_name3 (parametri_list) {// mètode concret} return_type method_name4 (parametri_list) {// mètode concret}};

El concepte d'una classe abstracta és similar tant en Java com en C #. Una classe abstracta és lleugerament diferent en C ++.

En C ++ si una classe té almenys una funció virtual, la classe es converteix en una classe abstracta. En lloc de la paraula clau "abstracte", s'utilitza la paraula clau "virtual" per declarar un mètode abstracte.

  1. Quan tingueu coneixement de "què cal", però no de "com s'implementaria", haureu d'utilitzar la interfície. D'altra banda, si sabeu el que cal i pargueu parcialment com s'implementaria, utilitzeu una classe abstracta.
  2. Una interfície té tots els seus mètodes abstractes, però, una classe abstracta té alguns mètodes abstractes i alguns mètodes concrets.
  3. Els mètodes dins d'una interfície són públics i abstractes, per tant, també es diu com a classe abstracta pura. D'altra banda, els mètodes dins d'un resum no es restringeixen només a públics i abstractes.
  4. Un mètode d'interfície no pot ser mai privat, protegit, final, estàtic, sincronitzat, natiu o strictfp. D'altra banda, no hi ha restriccions als mètodes d'una classe abstracta.
  5. Les variables d’una interfície són públiques i finals, ja que les declarem o no mentre que, no hi ha cap restricció que les variables d’una classe abstracta siguin públiques i només final.
  6. Les variables d'una interfície no poden ser mai transitòries ni protegides de manera privada, mentre que, en cap classe abstracte, no hi ha cap restricció.
  7. La variable d'una interfície s'ha d'inicialitzar durant la declaració. D'altra banda, les variables d'una classe abstracta es poden inicialitzar en qualsevol moment.
  8. Dins d'una interfície, no es pot declarar una instància o un bloc estàtic, però, podeu declarar una instància o un bloc estàtic dins d'una classe abstracta.
  9. No podeu definir constructor dins d’una interfície mentre que, podeu definir constructor dins d’una classe abstracta.

Conclusió:

Quan necessiteu crear una classe base que contingui una forma generalitzada de mètodes que es puguin implementar per les classes derivades segons la seva necessitat, el concepte d'interfície i de classe abstracta ajuda a fer-ho.