Abstract Class v/s Interface

Introduction 

In this article I will discuss Interfaces versus Abstract classes. The concept of Abstract classes and Interfaces is a bit confusing for beginners of Object Oriented programming. Therefore, I am trying to discuss the theoretical aspects of both the concepts and compare their usage. And finally I will demonstrate how to use them with C#.

What is an Abstract Class?



An abstract class is a special kind of class that cannot be instantiated. So the question is why we need a class that cannot be instantiated? An abstract class is only to be sub-classed (inherited from). In other words, it only allows other classes to inherit from it but cannot be instantiated. The advantage is that it enforces certain hierarchies for all the subclasses. In simple words, it is a kind of contract that forces all the subclasses to carry on the same hierarchies or standards.


What is an Interface?


An interface is not a class. It is an entity that is defined by the word Interface. An interface has no implementation; it only has the signature or in other words, just the declaration of the methods without the body. As one of the similarities to Abstract class, it is a contract that is used to define hierarchies for all subclasses or it defines specific set of methods and their arguments. The main difference between them is that a class can implement more than one interface but can only inherit from one abstract class. Since C# doesn't support multiple inheritance, interfaces may used to implement multiple inheritance.


Difference between Abstract Class & Interface


Feature Abstract Class Interface
Multiple inheritance A class can inherit only one abstract class. A class may implement only more than one interfaces
Default implementation An abstract class can provide complete, default code or an abstract method which must be implemented. An interface cannot provide any code for method,it just provides the signature.
Access Modfiers An abstract class can contain access modifiers for the subs, functions, properties An interface cannot have access modifiers, all the modifiers are accessed as public
Speed Fast Requires more time to find the actual method in the corresponding class
Adding functionality 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. 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
Fields and Constants An Abstract class may have Fields & Constants In C# No Field can be declared in interfaces


Example of Interface:

public interface ISample
{
    int Calculation(int firstValue, int secValue);
    double Calculation(int firstValue, in secValue);
}


Example of AbstractClass


public abstract class aSample
{
public abstract int Calculation(int firstValue, int secValue);
public abstract double Calculation(double firstValue, double secValue);
protected int Addition(int fValue, int sValue)
     {
              return fValue + sValue;
      }
}