Abstracte klassen en interfaces Overeenkomsten: (1) kan worden geërfd (2) niet kan worden geïnstantieerd (3) methodeverklaringen kan bevatten (4) De afgeleide klasse moet de niet-geïmplementeerde methode implementeren Categorie: (1) Abstracte basisklassen kunnen velden, eigenschappen en methode-implementaties definiëren. Interfaces kunnen alleen attributen, indexers, gebeurtenissen en methodeverklaringen definiëren en kunnen geen velden bevatten. (2) Een abstracte klasse is een onvolledige klasse die verdere verfijning behoeft, terwijl een interface een gedragsnorm is. Microsofts aangepaste interfaces worden altijd geleverd met een geschikt veld om te bewijzen dat ze uitingen zijn van de "Ik kan het..." ” (3) Interfaces kunnen meerdere keren worden geïmplementeerd, en abstracte klassen kunnen slechts door één persoon worden geërfd (4) Abstracte klassen zijn meer gedefinieerd tussen een reeks nauw verwante klassen, terwijl de meeste interfaces losjes verwante klassen zijn die allemaal een bepaalde functie implementeren (5) Abstracte klassen zijn concepten die zijn geabstraheerd uit een reeks verwante objecten, zodat ze de interne gemeenschappelijkheid van dingen weerspiegelen; Een interface is een functionele conventie die is gedefinieerd om externe aanroepen te voldoen, dus het weerspiegelt de externe kenmerken van dingen (6) De interface heeft in feite geen specifieke kenmerken van overerving, het belooft alleen methoden die kunnen worden aangeroepen (7) Interfaces kunnen worden gebruikt om callbacks te ondersteunen, maar overerving heeft deze functie niet (8) De specifieke methoden die door abstracte klassen worden geïmplementeerd zijn standaard virtueel, maar de interfacemethoden in de klasse die de interface implementeren zijn standaard niet-virtueel; natuurlijk kun je ze ook virtueel verklaren (9) Als een abstracte klasse een interface implementeert, kan de methode in de interface worden toegewezen aan de abstracte klasse als een abstracte methode zonder dat deze geïmplementeerd hoeft te worden, en kan de methode in de interface worden geïmplementeerd in een subklasse van de abstracte klasse
|