What’s the difference between an interface and abstract class?


Feature

Interface

Abstract class

Multiple inheritance

A class may inherit several interfaces.

A class may inherit only one abstract class.

Default implementation

All methods are abstract  there is no implementation

An abstract class can provide complete, default code and/or just the
details that have to be overridden.

Constants

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.

Homogeneity

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.

Speed

Requires more time to find the actual method in the corresponding
classes.

Fast

Adding functionality

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.

Modifiers 

No accessibility modifiers are allowed.

May have accessibility modifiers.