||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.
||Only Static final constants.
||Both instance and static constants are possible.
|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 the various implementations only share method signatures then it is better to use Interface.
||If the 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.
||If we add a new method to an Interface then we have to track down all the implementations of the interface and define implementation for the new method.
||If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly.