When to use abstract classes?

C#.NetAbstract Class

C# Problem Overview


Here is the MSDN article on abstract classes, but I really don't get it...

When should I really use abstract classes? What are the advantages of using abstract classes?

C# Solutions


Solution 1 - C#

Abstract classes are useful when you need a class for the purpose of inheritance and polymorphism, but it makes no sense to instantiate the class itself, only its subclasses. They are commonly used when you want to define a template for a group of subclasses that share some common implementation code, but you also want to guarantee that the objects of the superclass cannot be created.

For instance, let's say you need to create Dog, Cat, Hamster and Fish objects. They possess similar properties like color, size, and number of legs as well as behavior so you create an Animal superclass. However, what color is an Animal? How many legs does an Animal object have? In this case, it doesn't make much sense to instantiate an object of type Animal but rather only its subclasses.

Abstract classes also have the added benefit in polymorphism–allowing you to use the (abstract) superclass's type as a method argument or a return type. If for example you had a PetOwner class with a train() method you can define it as taking in an object of type Animal e.g. train(Animal a) as opposed to creating a method for every subtype of Animal.

Solution 2 - C#

By using abstract classes we are able to make the class more generic.

For example: if class A is an abstract class and there are classes class B, class C and class D extending abstract class A then these sub-classes will inherit a method which is already declared in abstract class A thereby making the method more generic.

Solution 3 - C#

You use them for classes which will never be created (so effectively don't exist), but you want to inherit from them for polymorphism reasons.

Solution 4 - C#

Richard has provided an example were an abstract class has advantages over non-abstract classes.

I would like to add a fact-table for choosing between an abstract class and an interface. The image can be found here.

enter image description here

Solution 5 - C#

Use abstract classes when you are defining behaviour for a class in your class heirarchy that is never going to be used to instantiate an object directly.

So, think of yourself as God for a moment. Your CBabyBoy and CBanyGirl classes wouldn't be abstract - as these are solid objects that do get created. On the other hand, your CPerson and CAnimal classes WOULD be abstract - they're useful from a type hierarchy point of view, but you won't ever be running CAnimal dingbat = new Animal();

Solution 6 - C#

Basically, you should use an abstract class, when some entity in your hierarchy logically will have method(s) it does not know how to implement, but it's descendants do. There are billions of 'real life' examples all over the web, really)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionbala3569View Question on Stackoverflow
Solution 1 - C#StradivariuzView Answer on Stackoverflow
Solution 2 - C#Vivek SaurabhView Answer on Stackoverflow
Solution 3 - C#PuppyView Answer on Stackoverflow
Solution 4 - C#Anton LyhinView Answer on Stackoverflow
Solution 5 - C#Martin MilanView Answer on Stackoverflow
Solution 6 - C#n535View Answer on Stackoverflow