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 HTC First en Samsung Galaxy Grand

    Verschil tussen HTC First en Samsung Galaxy Grand

    Belangrijk verschil: HTC First is de eerste telefoon die op de Facebook Home-gebruikersinterface wordt uitgebracht. De telefoon wordt gevoed door een Qualcomm MSM8930 Snapdragon 400 1, 4 GHz dual-core Krait en een 1 GB RAM. Samsung Galaxy Grand is een smartphone in het middensegment die is gelanceerd door de Samsung Corporation
  • verschil tussen: Verschil tussen globalisering en lokalisatie

    Verschil tussen globalisering en lokalisatie

    Belangrijkste verschil: Globalisering bevordert het vrije verkeer van goederen en diensten tussen gemeenschappen of landen. Aan de andere kant legt localisatie de nadruk op het promoten van lokale bedrijven en meer zelfafhankelijk zijn. Globalisering en lokalisatie, deze termen worden op veel gebieden gebruikt
  • verschil tussen: Verschil tussen Jihad en terrorisme

    Verschil tussen Jihad en terrorisme

    Belangrijkste verschil: Het belangrijkste verschil tussen jihad en terrorisme is dat terwijl jihad een religieuze ideologie is, deze verkeerd is geïnterpreteerd en ten onrechte is gebruikt om terrorisme te ondersteunen. Terrorisme is een onethische praktijk die al dan niet iets te maken heeft met religie.
  • verschil tussen: Verschil tussen Gevoelens en Emoties

    Verschil tussen Gevoelens en Emoties

    Belangrijkste verschil: Gevoelens betekenen alles dat kan worden ervaren via aanraking, geur, zicht of enig ander zintuig. Emotie wordt gebruikt om psychofysiologische uitdrukkingen, biologische reacties en mentale toestanden te beschrijven. Gevoelens en emoties zijn twee verwante concepten die vaak verward zijn omdat ze van dezelfde aard zijn
  • verschil tussen: Verschil tussen Discount Store en warenhuis

    Verschil tussen Discount Store en warenhuis

    Belangrijkste verschil: discountwinkels zijn winkels die goederen aanbieden voor een gereduceerde prijs in vergelijking met high-end designerwinkels en warenhuizen. Discountswinkels zijn een soort warenhuizen met een breed assortiment, terwijl andere zich specialiseren in geselecteerde waren. Warenhuizen zijn winkels die verschillende goederen en producten aanbieden
  • verschil tussen: Verschil tussen Asus PadFone Infinity en HTC One

    Verschil tussen Asus PadFone Infinity en HTC One

    Belangrijkste verschil: de Asus Padfone Infinity-smartphone is een gladde 5-inch Full HD 1920x1080, Super IPS + met Capacitive Multi-aanraakscherm en biedt een dichtheid van ongeveer 441 ppi. Het apparaat is een staeltelefoon, met gebogen hoeken, waardoor het lijkt op de 'iPhone' en 'HTC One'
  • verschil tussen: Verschil tussen TIFF en PNG

    Verschil tussen TIFF en PNG

    Belangrijk verschil: zowel TIFF als PNG zijn rasterbestandsindelingen, in wezen een bitmapafbeelding. TIF en TIFF zijn bestandsextensies die worden gebruikt voor de Tagged Image File Format. PNG staat voor Portable Network Graphics. Het is gemaakt als een verbeterde en niet-geoctrooieerde vervanging voor Graphics Interchange Format (GIF)
  • verschil tussen: Verschil tussen angst en bipolair

    Verschil tussen angst en bipolair

    Belangrijkste verschil: Angst is een reactie op een stressfactor. Het is een gevoel van angst, onbehagen en zorgen. Het kan in elk geval worden geworteld waardoor men zich gefrustreerd, boos of nerveus voelt. Bipolaire stoornis is een aandoening waarbij mensen uitgebreide stemmingswisselingen ervaren
  • verschil tussen: Verschil tussen personeel, werknemer en werknemer

    Verschil tussen personeel, werknemer en werknemer

    Belangrijkste verschil: personeel, werknemer en werknemer zijn drie termen die erg op elkaar lijken en allemaal verwijzen naar iemand die werkt. Personeel is "een groep mensen die voor een organisatie of bedrijf werken." Een werknemer is "iemand die een bepaalde taak verricht om geld te verdienen

Editor'S Choice

Het verschil tussen Cotton Jeans en Denim Jeans

Belangrijk verschil: spijkerbroeken zijn gemaakt van denim of materiaal van een dungaree-doek. Jeans werden populair gemaakt door de blauwe denim-broek, die Levi Strauss in 1873 heeft uitgevonden. Denim is een robuust, katoenen twill-textiel, wat betekent dat het is gemaakt van katoenvezel dat op een specifieke manier is geweven