What is the difference between an Interface and an Abstract class?
An abstract class cannot be instantiated. The purpose of an abstract class is to provide a common definition of a base class that multiple derived classes can share.For example, a class library may define an abstract class that is used as a parameter to many of its functions, and require programmers using that library to provide their own implementation of the class by creating a derived class.
Abstract classes may also define abstract methods. This is accomplished by adding the keyword abstract before the return type of the method. For example:
public abstract class A { public abstract void DoWork(int i); }
Abstract methods have no implementation, so the method definition is followed by a semicolon instead of a normal method block. Derived classes of the abstract class must implement all abstract methods. When an abstract class inherits a virtual method from a base class, the abstract class can override the virtual method with an abstract method. For example:
// compile with: /target:library public class D { public virtual void DoWork(int i) { // Original implementation. } } public abstract class E : D { public abstract override void DoWork(int i); } public class F : E { public override void DoWork(int i) { // New implementation. } }
If a virtual method is declared abstract,
it is still virtual to any class inheriting from the abstract class. A
class inheriting an abstract method cannot access the original
implementation of the method—in the previous example, DoWork on class F cannot call DoWork on class D. In this way, an abstract class can force derived classes to provide new method implementations for virtual methods.
Interface
An interface contains only the signatures of methods, properties, events or indexers.
A class or struct that implements the interface must implement the
members of the interface that are specified in the interface definition.
In the following example, class ImplementationClass must implement a method named SampleMethod that has no parameters and returns void.
interface ISampleInterface { void SampleMethod(); } class ImplementationClass : ISampleInterface { // Explicit interface member implementation: void ISampleInterface.SampleMethod() { // Method implementation. } static void Main() { // Declare an interface instance. ISampleInterface obj = new ImplementationClass(); // Call the member. obj.SampleMethod(); } }
An interface has the following properties:
-
An interface is like an abstract base class. Any class or struct that implements the interface must implement all its members.
-
An interface can't be instantiated directly. Its members are implemented by any class or struct that implements the interface.
-
Interfaces can contain events, indexers, methods, and properties.
-
Interfaces contain no implementation of methods.
-
A class or struct can implement multiple interfaces. A class can inherit a base class and also implement one or more interfaces.
|
Feature
|
Interface
|
Abstract class
|
|
Multiple
inheritance
|
A
class may inherit several interfaces.
|
A
class may inherit only one abstract class.
|
|
Default
implementation
|
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.
|
|
Access
Modfiers
|
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.
|
|
Homogeneity
|
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.
|
|
Speed
|
Requires
more time to find the actual method in the corresponding classes.
|
Fast
|
|
Adding
functionality (Versioning)
|
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.
|
|
Fields
and Constants
|
No
fields can be defined in interfaces
|
An
abstract class can have fields and constrants defined
|
|
Interface
|
Abstract
|
|
Interface definition begins with a keyword interface so it is of type
interface
|
Abstract classes are declared with the abstract keyword so it is of
type class
|
|
Interface has no implementation, but they have to be implemented.
|
Abstract class’s methods can have implementations and they have to be
extended.
|
|
Interfaces can only have method declaration (implicitly public and
abstract) and properties (implicitly public static)
|
Abstract class’s methods can’t have implementation only when declared
abstract.
|
|
Interface can inherit more than one interfaces
|
Abstract class can implement more than one interfaces, but can
inherit only one class
|
|
Interface can be used when the implementation is changing
|
Abstract class must override all abstract method and may override
virtual methods
|
|
Interface makes implementation interchangeable
|
Abstract class can be used to provide some default behavior for a
base class.
|
|
Interface increase security by hiding the implementation
|
Abstract class can be used when implementing framework
|
|
|
Abstract classes are an excellent way to create planned inheritance
hierarchies and also to use as non-leaf classes in class hierarchies.
|
Alok
No comments:
Post a Comment