Verschil tussen interface en abstracte klasse in Java

Belangrijkste verschil: een interface of een protocol is een veelgebruikte manier om niet-gerelateerde objecten met elkaar te laten communiceren. Het vertegenwoordigt een afgesproken gedrag dat de interactie tussen de twee objecten mogelijk maakt. Een abstracte klasse is een klasse van objecten die niet kan worden geïnstantieerd of een instantie van een object kan instellen. Deze klasse heeft mogelijk geen implementatie of kan een onvolledige implementatie hebben.

Java, C ++, C # zijn allemaal gecompliceerde programmeertalen die een gedetailleerde studie en inzicht vereisen om mee te kunnen werken. Er zijn veel verschillende methoden die in deze talen worden gebruikt die bepalen hoe de taal zal werken. Interface en abstracte klasse zijn twee verwarrende concepten die deel uitmaken van OOP (object-oriented programming). Deze twee kunnen afzonderlijk of samen met elkaar worden gebruikt. Deze twee zijn compleet verschillend van elkaar en worden in verschillende gevallen gebruikt.

Java is een programmeertaal die is beïnvloed door de C-taal. Het ontleent veel van de syntaxis van C en C ++, maar het heeft minder faciliteiten op laag niveau dan beide. Java is een algemene programmeertaal die is ontworpen om minder implementatieafhankelijkheden te hebben in vergelijking met eerdere talen. Het is een gelijktijdige, op klassen gebaseerde en een objectgerichte taal.

Java is ontwikkeld door James Gosling van Sun Microsystems en werd uitgebracht in 1995. Oorspronkelijk werd het uitgebracht als een kerncomponent van het Java-platform van Sun Microsystems. Sun heeft sindsdien de meeste van haar Java-technologieën opnieuw gelicentieerd onder de GNU General Public License. Dit betekent dat alle technologie waarvoor een licentie is verleend onder GNU General Public License open source is en algemeen gratis beschikbaar is. Sun Microsystems is uiteindelijk samengevoegd tot Oracle Corporation. Vanaf 2012 is Java een van de meest populaire programmeertalen voor gebruik geworden. Dit geldt met name voor client-server webapplicaties. Veel andere systemen hebben alternatieve implementaties van Sun-technologieën ontwikkeld, zoals GNU Compiler voor Java en GNU Classpath.

Interface of een protocol is een gebruikelijke manier om niet-gerelateerde objecten met elkaar te laten communiceren. Het vertegenwoordigt een afgesproken gedrag dat de interactie tussen de twee objecten mogelijk maakt. De interface bevat de sleutel tot de verschillende acties die worden geïmplementeerd en dient als een koppeling tussen de twee verschillende objecten. Als een klasse objecten wordt blootgesteld aan de interface, moet de klasse het gedrag volgen dat door de interface wordt geïmplementeerd. Gewoonlijk bevatten interfaces alleen constante verklaringen en handtekeningen van methoden. Elke interface die een bepaalde interface implementeert, moet alle in de interface genoemde methoden toepassen of worden gedeclareerd als een abstracte klasse. In Java kan elk object worden gedefinieerd als een interface, als dat object null is of een klasse bevat waarin het die specifieke interface implementeert. Men kan meerdere interfaces implementeren in een enkele klasse in Java met behulp van implementatietrefwoorden.

Een abstracte klasse is een klasse van objecten die niet kan worden geïnstantieerd of een instantie van een object kan instellen. Deze klasse heeft mogelijk geen implementatie of kan een onvolledige implementatie hebben. Het kan ook abstracte methoden of eigenschappen hebben die door alle subklassen worden gedeeld. In sommige programmeertalen staan ​​abstracte typen zonder implementatie bekend als interfaces. In Java kan een abstract type worden gemaakt met het sleutelwoord 'abstract' in de klassendefinitie. Het doel van het hebben van een abstracte klasse om alle methoden die niet zijn geïmplementeerd in de abstracte klasse te plaatsen en deze naar de subklasse te laten om te bepalen hoe deze klassen moeten worden geïmplementeerd. Als een klasse één abstracte methode heeft, moet de klasse worden gedeclareerd als een abstracte klasse, hoewel het niet nodig is om ten minste één methode te hebben om een ​​klassenamenvatting te declareren.

Malliktalksjava.in vermeldt de belangrijkste verschillen tussen interface en abstract als:

  • De abstracte klasse heeft de constructor, maar de interface niet.
  • Abstracte klassen kunnen implementaties hebben voor sommige van de leden (methoden), maar de interface kan geen implementatie hebben voor een van zijn leden.
  • Abstracte klassen zouden subklassen anders moeten bevatten die nutteloos zijn.
  • Interfaces moeten implementaties hebben van andere klassen anders die nutteloos zijn
  • Alleen een interface kan een andere interface uitbreiden, maar elke klasse kan een abstracte klasse uitbreiden.
  • Alle variabelen in interfaces zijn standaard definitief
  • Interfaces bieden een vorm van meerdere overerving. Een klasse kan slechts één andere klasse uitbreiden.
  • Interfaces zijn beperkt tot openbare methoden en constanten zonder implementatie. Abstracte klassen kunnen een gedeeltelijke implementatie hebben, beschermde delen, statische methoden, enz.
  • Een klasse kan verschillende interfaces implementeren. Maar in het geval van een abstracte klasse kan een klas slechts één abstracte klasse uitbreiden.
  • Interfaces zijn traag omdat het extra indirectie vereist om de corresponderende methode in de eigenlijke klasse te vinden. Abstracte lessen zijn snel.
  • Toegankelijkheidsmodificator (openbaar / privé / intern) is toegestaan ​​voor abstracte klasse. Interface staat toegankelijkheidsmodificator niet toe
  • Een abstracte klasse kan complete of onvolledige methoden bevatten. Interfaces kunnen alleen de handtekening van een methode bevatten, maar geen hoofdtekst. Een abstracte klasse kan dus methoden implementeren, maar een interface kan geen methoden implementeren.
  • Een abstracte klasse kan velden, constructors of destructors bevatten en eigenschappen implementeren. Een interface mag geen velden, constructors of destructors bevatten en heeft alleen de handtekening van de property, maar geen implementatie.
  • Verschillende toegangsmodificatoren zoals abstract, beschermd, intern, openbaar, virtueel, enz. Zijn nuttig in abstracte klassen, maar niet in interfaces.
  • Abstract bereik is tot afgeleide klasse.
  • Interfacebereik is van elk niveau van zijn overervingsketen.

De informatie voor de tabel is de beleefdheid van codeproject.com en mindprod.com

Interface

Abstracte klasse

Meerdere overerving

Een klasse kan verschillende interfaces erven.

Een klasse kan slechts één abstracte klasse erven.

Standaard implementatie

Een interface kan geen code bieden, alleen de handtekening.

Een abstracte klasse kan volledige, standaardcode en / of alleen de details leveren die moeten worden genegeerd.

Toegangsmodificaties

Een interface kan geen toegangsmodificators hebben voor de subs, functies, eigenschappen etc. alles wordt als openbaar beschouwd.

Een abstracte klasse kan toegangsmodifiers bevatten voor de subs, functies en eigenschappen.

Core vs. Peripheral

Interfaces worden gebruikt om de perifere mogelijkheden van een klasse te definiëren. Met andere woorden, zowel Mens als Voertuig kunnen erven van een IMovable interface.

Een abstracte klasse definieert de kernidentiteit van een klasse en wordt daar gebruikt voor objecten van hetzelfde type.

homogeniteit

Als verschillende implementaties alleen methodenhandtekeningen delen, is het beter om interfaces te gebruiken.

Als verschillende implementaties van dezelfde soort zijn en een gemeenschappelijk gedrag of status gebruiken, dan is abstracte klasse beter te gebruiken.

Snelheid

Vereist meer tijd om de eigenlijke methode in de overeenkomstige klassen te vinden.

Snel

Functionaliteit toevoegen

Als we een nieuwe methode aan een interface toevoegen, moeten we alle implementaties van de interface opsporen en de implementatie voor de nieuwe methode definiëren.

Als we een nieuwe methode toevoegen aan een abstracte klasse, hebben we de mogelijkheid om standaardimplementatie te bieden en daarom zou alle bestaande code correct kunnen werken.

Velden en constanten

Er kunnen geen velden worden gedefinieerd in interfaces.

In een abstracte klasse kunnen velden en constanten worden gedefinieerd.

terseness

De constante verklaringen in een interface zijn allemaal veronderstelde openbare statische finale.

Gedeelde code kan worden toegevoegd in een abstracte klasse.

constanten

Alleen statische eindconstanten kunnen deze zonder kwalificatie gebruiken in klassen die de interface implementeren.

Zowel een instantie als statische constanten zijn mogelijk. Zowel statische als instance intialiser-code zijn ook mogelijk om de constanten te berekenen.

Gemak van derden

Een interface-implementatie kan aan elke bestaande klasse van derden worden toegevoegd.

Een klasse van derden moet worden herschreven om alleen uit de abstracte klasse te worden uitgebreid.

is-een-kan of kan

Interfaces worden vaak gebruikt om de perifere capaciteiten van een klasse te beschrijven, niet de centrale identiteit ervan. Een klasse Automobile kan bijvoorbeeld de Recyclebare interface implementeren, die van toepassing zou kunnen zijn op veel anderszins totaal niet-gerelateerde objecten.

Een abstracte klasse definieert de kernidentiteit van zijn afstammelingen. Geïmplementeerde interfaces inventariseren de algemene dingen die een klasse kan doen, niet de dingen die een klasse is.

In een Java-context zouden gebruikers de Runnable-interface moeten implementeren in plaats van Thread uit te breiden, omdat ze niet echt geïnteresseerd zijn in wat nieuwe Thread-functionaliteit, ze willen gewoon dat sommige code de mogelijkheid hebben om onafhankelijk te werken. Ze willen iets maken dat in een thread kan worden uitgevoerd, niet een nieuw soort thread. Hetzelfde is-a tegen-een debat komt naar voren wanneer je besluit te erven of te delegeren.

Inpluggen

De gebruiker kan een nieuwe vervangende module schrijven voor een interface die niet één code bevat die overeenkomt met de bestaande implementaties. Wanneer de gebruiker de interface implementeert, beginnen ze helemaal opnieuw zonder enige standaardimplementatie. De gebruiker moet hulpmiddelen van andere klassen verkrijgen; niets komt met de interface anders dan een paar constanten. Dit geeft de gebruiker de vrijheid om een ​​radicaal ander intern ontwerp te implementeren.

De gebruiker moet de abstracte klasse gebruiken zoals deze is voor de codebasis, met al zijn begeleidende bagage, goed of slecht. De auteur van de abstracte klasse heeft structuur opgelegd aan de gebruiker.

Onderhoud

Als de clientcode alleen in termen van een interface spreekt, kunt u eenvoudig de concrete implementatie erachter veranderen met behulp van een fabrieksmethode.

Als de clientcode alleen in termen van een abstracte klasse spreekt, kunt u de concrete implementatie erachter eenvoudig wijzigen met behulp van een fabrieksmethode.

Aanbevolen

Gerelateerde Artikelen

  • verschil tussen: Verschil tussen asynchroon en synchroon

    Verschil tussen asynchroon en synchroon

    Belangrijk verschil: Asynchroon en synchroon zijn twee verschillende methoden voor transmissiesynchronisatie. Het grootste verschil tussen hen ligt in hun transmissiemethoden, dwz synchrone transmissies worden gesynchroniseerd door een externe klok; terwijl asynchrone transmissies worden gesynchroniseerd door speciale signalen langs het transmissiemedium
  • verschil tussen: Het verschil tussen Dwarf Planet en Planet

    Het verschil tussen Dwarf Planet en Planet

    Belangrijk verschil: een planeet is een object dat om de zon draait in een elliptische baan, de materie in bolvorm heeft verergerd en de baan van ander vuil heeft opgeruimd. Hoewel een dwergplaneet ook om de zon draait, heeft hij zijn materie in bolvorm verergerd, maar heeft hij zijn baan van ander puin niet opgeruimd
  • verschil tussen: Verschil tussen 1AC, 2AC en 3AC in Indian Railway

    Verschil tussen 1AC, 2AC en 3AC in Indian Railway

    Belangrijkste verschil: een trein in het Indiase spoorwegsysteem bestaat uit verschillende touringcars, die grofweg zijn ingedeeld als airconditioned en niet-geconditioneerd. De klassen met airconditioning zijn First Class AC (1AC), AC Two Tier of Second Class AC (2AC), AC Three Tier of Third Class AC (3AC) en AC Chair Class
  • verschil tussen: Het verschil tussen Longboard en Skateboard

    Het verschil tussen Longboard en Skateboard

    Belangrijkste verschil: Skateboard is een klein bord dat ongeveer 3 voet lang is en een gebogen structuur heeft. Een longboard aan de andere kant is beduidend langer dan het skateboard, dat maximaal 4 en een half tot 5 voet kan meten. De eeuwenlange discussie tussen wat harder is, een skateboard of een longboard, heeft al jaren extreme sportenthousiastelingen teisteren
  • verschil tussen: Verschil tussen de Nokia Lumia 620 en de LG Nexus 4

    Verschil tussen de Nokia Lumia 620 en de LG Nexus 4

    Belangrijk verschil: een van de nieuwste smartphones onder het merk is de Nokia Lumia 620. Nokia Lumia 620 is bedoeld voor beginnende kopers die een Windows Phone 8 willen proberen, maar zich niet kunnen veroorloven er te veel geld aan uit te geven. De Nexus 4 is de vierde Android-smartphone met Nexus-merk van Google
  • verschil tussen: Verschil tussen Mall en Mart

    Verschil tussen Mall en Mart

    Belangrijkste verschil: winkelcentra of winkelcentra zijn grote besloten ruimtes die vaak worden gekenmerkt door veel winkels die merchandise verkopen aan het publiek. Winkelcentra kunnen van middelmatige tot grote omvang zijn, afhankelijk van de constructie en het aantal winkels dat ze willen behouden
  • verschil tussen: Verschil tussen onafhankelijke contractant en werknemer

    Verschil tussen onafhankelijke contractant en werknemer

    Belangrijkste verschil: een werknemer is iemand die in dienst is van een bedrijf. Ze werken rechtstreeks voor het bedrijf en krijgen op hun beurt een salaris en kunnen ook bonussen en arbeidsvoorwaarden ontvangen. Een onafhankelijke contractant kan een persoon, een bedrijf, een bedrijf, een onderneming, enz
  • verschil tussen: Verschil tussen HTML en DHTML

    Verschil tussen HTML en DHTML

    Belangrijk verschil: HTML staat voor HyperText Markup Language. Het is een bekende opmaaktaal die wordt gebruikt om webpagina's te ontwikkelen. Het bestaat al heel lang en wordt veel gebruikt bij het ontwerpen van webpagina's. DHTML is in wezen dynamische HTML. Het is een nieuwe manier om de standaard HTML-codes en -opdrachten te bekijken en te controleren
  • verschil tussen: Verschil tussen soja chunks en soja korrels

    Verschil tussen soja chunks en soja korrels

    Belangrijkste verschil: beide sojabrokken en sojakorrels zijn gemaakt van sojabonen. Ze staan ​​ook bekend als getextureerd of getextureerd plantaardig eiwit (TVP). Het enige verschil tussen sojabrokken en sojakorrels is dat sojabrokken groter zijn, terwijl korrels kleiner zijn. Beide sojabrokken en sojakorrels worden gemaakt van sojabonen. So

Editor'S Choice

Verschil tussen maag en zuurgraad

Belangrijkste verschil: medisch gezien, maag verwijst naar alles dat is gerelateerd aan de maag, zoals maagzweren definieert een maagzweer gevormd in de maag. Anderzijds verwijst zuurgraad naar elke soort toestand die leidt tot overmatige uitscheiding van zuur uit de maagklieren. Veel mensen beschouwen maagzuur en aciditeit als een en hetzelfde