Features Interfaces abstract class
|A class may inherit several interfaces.
|A class may inherit only one abstract class.
|An interface cannot provide any code, just the signature.
|An abstract class can provide complete, default code and/or just the details that have to be overridden.
|An interface cannot have access modifiers for the subs, functions, properties etc everything is assumed as public
|An abstract class can contain access modifiers for the subs, functions, properties
|Core VS Peripheral
|Interfaces are used to define the peripheral abilities of a class. In other words both Human and Vehicle can inherit from a IMovable interface.
|An abstract class defines the core identity of a class and there it is used for objects of the same type.
|If various implementations only share method signatures then it is better to use Interfaces.
|If various implementations are of the same kind and use common behaviour or status then abstract class is better to use.
|Requires more time to find the actual method in the corresponding classes.