What is the exact use of an Abstract class? Is not possible to do the same things in an ordinary class as it is an an abstract class?
An abstract class is used when you have some base functionality that you want subclasses to inherit, but it wouldn't make sense to instantiate the base class. For example, if you had something like a Shape base class, you could have some built in implementation that could be used by subclasses as well as interface methods that you want the subclasses to implement. However, it probably wouldn't make sense to create a Shape object. An abstract class gives you this functionality. Another great example of abstract class uses is the abstract factory pattern.
Use an abstract class to provide some concrete implementation but not allow instantiation. You can always instantiate an ordinary class which doesn't make sense if it can't stand alone. At the same time, an interface might not be enough if there's a concrete implementation that's identical in all implementing classes. An abstract class is just enough.
- Interface: contract only, no implementation, no instantiation
- Abstract class: contract, some implementation, no instantiation
- Class: contract, implementation, instantiation
Take a look at Template Method Design Pattern I think abstract class is unreplaceable there.
Unlike regular classes, abstract
classes can contain abstract
methods. They act much like interface members.
Meanwhile, they can do just about everything else that regular classes can do: they can implement methods, contain fields & nested types, derive from another class, etc.
Regular classes require you to provide implementations for all methods.
Interfaces require you to not provide any implementations for all methods.
Abstract classes are the only type of class that allow you to both have methods that do contain an implementation, and have methods that do not provide an implementation, but require an inheriting class to provide one.
The fact that you are allowed to add methods without an implementation is the reason you cannot instantiate an abstract class: you can only instantiate something that has implementations for all its methods.