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

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