Wanneer abstracte klassen gebruiken?

Hier is het MSDN-artikel over abstracte klassen, maar ik snap het niet…

Wanneer moet ik echt abstracte klassen gebruiken? Wat zijn de voordelen van het gebruik van abstracte klassen?


Antwoord 1, autoriteit 100%

Abstracte klassen zijn handig wanneer u een klasse nodig hebt voor overerving en polymorfisme, maar het heeft geen zin om de klasse zelf te instantiëren, alleen de subklassen. Ze worden vaak gebruikt wanneer u een sjabloon wilt definiëren voor een groep subklassen die een gemeenschappelijke implementatiecode delen, maar u ook wilt garanderen dat de objecten van de superklasse niet kunnen worden gemaakt.

Stel bijvoorbeeld dat u objecten voor honden, katten, hamsters en vissen moet maken. Ze hebben vergelijkbare eigenschappen, zoals kleur, grootte en aantal poten, evenals gedrag, dus je creëert een Animal-superklasse. Maar welke kleur is een dier? Hoeveel poten heeft een dierlijk object? In dit geval heeft het weinig zin om een ​​object van het type Animal te instantiëren, maar alleen zijn subklassen.

Abstracte klassen hebben ook het extra voordeel van polymorfisme: u kunt het type van de (abstracte) superklasse gebruiken als een methodeargument of een retourtype. Als u bijvoorbeeld een PetOwner-klasse had met een train()-methode, kunt u deze definiëren als een object van het type Animal, b.v. train(Animal a) in tegenstelling tot het creëren van een methode voor elk subtype van Animal.


Antwoord 2, autoriteit 4%

Door abstracte klassen te gebruiken, kunnen we de klasse generieker maken.

Bijvoorbeeld: als klasse A een abstracte klasse is en er zijn klassen klasse B, klasse C en klasse D die abstracte klasse A uitbreiden, dan zullen deze subklassen een methode erven die al is gedeclareerd in abstracte klasse A, waardoor de methode wordt meer algemeen.


Antwoord 3, autoriteit 3%

Je gebruikt ze voor klassen die nooit zullen worden gemaakt (dus feitelijk niet bestaan), maar je wilt ze erven vanwege polymorfisme.


Antwoord 4, autoriteit 3%

Richard heeft een voorbeeldgegeven waar een abstracte klasse voordelen heeft over niet-abstracte lessen.

Ik wil graag een feitentabel toevoegen om te kiezen tussen een abstracte klasse en een interface. De afbeelding is hierte vinden.

voer hier de afbeeldingsbeschrijving in


Antwoord 5, autoriteit 2%

Gebruik abstracte klassen wanneer u gedrag definieert voor een klasse in uw klassenhiërarchie die nooit zal worden gebruikt om een ​​object rechtstreeks te instantiëren.

Dus, beschouw jezelf even als God. Je klassen CBabyBoy en CBanyGirl zouden niet abstract zijn – omdat dit solide objecten zijn die wel worden gemaakt. Aan de andere kant ZOUDEN uw CPerson- en CAnimal-klassen abstract zijn – ze zijn nuttig vanuit het oogpunt van typehiërarchie, maar u zult nooit CAnimal dingbat = new Animal();


Antwoord 6

Kortom, je zou een abstracte klasse moeten gebruiken, wanneer een entiteit in je hiërarchie logischerwijs methode(n) zal hebben die hij niet weet te implementeren, maar zijn nakomelingen wel. Er zijn miljarden ‘echte’ voorbeelden op internet, echt waar)

Other episodes