Verschil tussen interface en abstracte klasse in Java & C #

Schrijver: Laura McKinney
Datum Van Creatie: 1 April 2021
Updatedatum: 13 Kunnen 2024
Anonim
Verschil tussen interface en abstracte klasse in Java & C # - Technologie
Verschil tussen interface en abstracte klasse in Java & C # - Technologie

Inhoud


Interface en Abstract-klasse dragen beide bij aan 'onvolledig type' in OOP. Soms hebben we een superklasse nodig om te definiëren "wat te doen", maar niet "hoe te doen", het is hoe deel te doen zal worden geïmplementeerd door de afgeleide klasse volgens zijn behoefte, "koppel”Bieden hiervoor een oplossing. Soms hebben we een superklasse-klasse nodig die een algemene structuur definieert die door afgeleide klassen kan worden geïmplementeerd en een specifieke structuur die door de afgeleide klassen kan worden gebruikt, "abstracte klasse”Biedt hiervoor een oplossing. Het fundamentele verschil tussen interface en abstracte klasse is dat interface volledig onvolledig is en abstracte klasse gedeeltelijk onvolledig.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingKoppelAbstracte klasse
basis-Wanneer u alleen kennis hebt van de vereisten en niet van de implementatie ervan, gebruikt u "Interface".Wanneer u gedeeltelijk op de hoogte bent van de implementaties, gebruikt u "Abstracte klassen".
methodenInterface bevat alleen abstracte methoden.Abstracte klasse bevat zowel abstracte methoden als concrete methoden.
Toegang Modifier van methodenInterfacemethoden zijn altijd "Openbaar" en "Abstract", zelfs als we dit niet aangeven. Daarom kan worden gezegd dat het 100% pure abstracte klasse is.Het is niet verplicht dat de methode in de abstracte klasse openbaar en abstract is. Het kan ook concrete methoden hebben.
Beperkte Modifier voor methodenEen interfacemethode kan niet worden gedeclareerd met de volgende modificaties:
Public: privé en beschermd
Abstract: definitief, statisch, gesynchroniseerd, native, strictfp.
Er zijn geen beperkingen voor de modificaties van de abstracte klassenvariabele.
Toegang Modifier van variabelenToegestane modifier voor interfacevariabelen is openbaar, statisch en definitief, of we nu verklaren of niet.De variabelen in abstracte klasse hoeven niet openbaar, statisch, definitief te zijn.
Beperkte modificaties voor variabelenInterfacevariabelen kunnen niet worden aangemerkt als privé, beschermd, tijdelijk, vluchtig.Er is geen beperking op de modificatoren van abstracte klassenvariabelen.
Initialisatie van variabelenDe interfacevariabelen moeten worden geïnitialiseerd op het moment van aangifte.Het is niet verplicht dat abstracte klassenvariabelen moeten worden geïnitialiseerd op het moment van aangifte.
Exemplaar en statische blokkenIn de interface kunt u geen instantie of statisch blok declareren.Abstracte klasse staat een instantie of statisch blok toe.
constructorsU kunt de constructor niet binnen de interface declareren.Je kunt de constructor binnen een abstracte klasse verklaren.


Definitie van interface

Java staat meervoudige overerving niet toe. Dat wil zeggen dat een enkele klasse niet meer dan één klasse tegelijk kan erven. De reden hierachter kan met een voorbeeld worden verklaard. Stel dat we twee bovenliggende klassen hebben, A en B en een afgeleide klasse C. De afgeleide klasse C neemt zowel de klassen A als B over.Beide hebben nu de klasse A en B hebben methode set (), dan is het een vraag voor klasse C welke klasse de methode set () moet erven. De oplossing voor dit probleem is "interface".

Interface is een pure abstracte klasse. Het sleutelwoord dat wordt gebruikt om een ​​interface te maken is "interface". Omdat alle methoden in de interface volledig abstract zijn. De interface geeft alleen aan wat een klasse moet doen, maar het definieert niet hoe het moet. Alleen omdat alle in de interface gedeclareerde methode abstract is, wordt er geen instantie gemaakt voor een interface. De algemene vorm van "interface" in Java is:


access_specifier koppel interface_name {return-type method-name1 (parameter-lijst); return-type method-name2 (parameterlijst); type final-varname1 = waarde; type final-varname2 = waarde; // ... return-type method-nameN (parameterlijst); type final-varnameN = waarde; }

De toegangsspecificatie wordt openbaar gemaakt omdat de klassen de interface moeten implementeren.

We hebben niet het concept van "Interface" in C ++. Maar Java en C # definiëren de interface heel goed.

Interface in Java:

  • Variabelen van een interface zijn standaard altijd openbaar, statisch en definitief.
  • Variabelen moeten worden geïnitialiseerd op het moment van aangifte.
  • Variabelen kunnen nooit als privé, beschermd, tijdelijk en vluchtig worden verklaard.
  • Methoden van een interface zijn altijd openbaar en abstract, terwijl ze nooit als privé, beschermd, definitief, statisch, gesynchroniseerd, native en strictfp kunnen worden verklaard.
  • U kunt geen enkele constructor binnen de interface declareren, aangezien het hoofddoel van de constructor de initialisatie van klassenvariabelen is, maar in interface-variabelen worden geïnitialiseerd op het moment van de verklaring.
  • Interface kan andere interfaces erven, maar de klasse die een dergelijke interface implementeert, moet de methoden van alle geërfde interfaces implementeren.
  • Een klasse kan meer dan één interface tegelijk erven en moet alle methoden van alle overgenomen interfaces implementeren.

De algemene vorm van het implementeren van een interface in Java:

class class_name implementeert Interface_name {// class-body}

Voor het erven van een interface gebruikt een klasse een trefwoord "implementeert", en de klasse implementeert alle methoden die door een geërfde interface worden aangegeven.

Interface in C #:

Interface in C # lijkt bijna op interface in Java behalve:

  • Interface in C # geeft geen variabelen aan.
  • De naam van de interface wordt voorafgegaan door een hoofdletter I en wordt geërfd met een dubbele punt (:).

De algemene vorm van het implementeren van een interface in C #:

class class_name: interface_name {// class-body}

Definitie van abstracte klasse

Een klasse die een of meer abstracte methoden bevat, wordt abstracte klasse genoemd en een klasse wordt als abstract verklaard met behulp van het trefwoord 'abstract', voorafgegaan door het trefwoord 'class' aan het begin van de klasseverklaring. Aangezien de abstracte klasse de abstracte methode bevat, vormt deze een onvolledig type. Daarom kunt u geen objecten van een abstracte klasse maken. Telkens wanneer een klasse een abstracte klasse erft, moet deze alle abstracte methoden van de abstracte klasse implementeren. Als dit niet het geval is, moet deze ook als abstract worden verklaard. Het abstracte kenmerk wordt geërfd totdat de volledige implementatie van abstracte methoden is bereikt.

De abstracte klasse kan ook concrete methoden bevatten die kunnen worden gebruikt door de afgeleide klasse zoals deze is. Maar je kunt geen abstracte constructor of een abstracte statische methode binnen een abstracte klasse verklaren. De algemene vorm van de abstracte klasse in Java is als volgt:

abstract class class_name {abstract method_name1 (); abstract method_name2 (); : return_type method_name3 (parameter_list) {// concrete methode} return_type method_name4 (parameter_list) {// concrete methode}};

Het concept van een abstracte klasse is vergelijkbaar in zowel Java als C #. Een abstracte klasse is iets anders in C ++.

Als in C ++ een klasse minimaal één virtuele functie heeft, wordt de klasse een abstracte klasse. In plaats van het trefwoord 'abstract', wordt het trefwoord 'virtual' gebruikt om een ​​abstracte methode aan te geven.

  1. Wanneer u de kennis heeft van "wat nodig is" maar niet van "hoe het zou worden geïmplementeerd", moet de interface worden gebruikt. Aan de andere kant, als je weet wat nodig is en gedeeltelijk weet hoe het zou worden geïmplementeerd, gebruik dan een abstracte klasse.
  2. Een interface heeft al zijn methoden abstract, maar een abstracte klasse heeft enkele abstracte methoden en enkele concrete methoden.
  3. De methoden in een interface zijn openbaar en abstract, daarom wordt het ook wel een pure abstracte klasse genoemd. Aan de andere kant zijn de methoden in een abstract niet beperkt tot openbaar en alleen abstract.
  4. Een interfacemethode kan nooit privé, beveiligd, definitief, statisch, gesynchroniseerd, native of strictfp zijn. Aan de andere kant zijn er geen beperkingen aan methoden van een abstracte klasse.
  5. De variabelen in een interface zijn openbaar en definitief, of we ze nu verklaren of niet, terwijl er geen beperking bestaat voor de variabelen van een abstracte klasse om alleen openbaar en definitief te zijn.
  6. Variabelen in een interface kunnen nooit privé-beschermd tijdelijk of vluchtig zijn, terwijl er geen beperking is voor variabelen in een abstracte klasse.
  7. De variabele van een interface moet tijdens de aangifte worden geïnitialiseerd. Aan de andere kant kunnen de variabelen in een abstracte klasse op elk moment worden geïnitialiseerd.
  8. Binnen een interface kan een instantie of statisch blok niet worden gedeclareerd, maar u kunt een instantie of statisch blok binnen een abstracte klasse declareren.
  9. U kunt geen constructor in een interface definiëren, terwijl u constructor in een abstracte klasse kunt definiëren.

Gevolgtrekking:

Wanneer u een basisklasse moet maken die een algemene vorm van methoden bevat die door de afgeleide klassen volgens hun behoefte kan worden geïmplementeerd, helpt het concept interface en abstracte klasse daarbij.