Theoretically there are basically 5 differences between Abstract Class and Interface, which are listed as below: -
- A class can implement any number of interfaces but a subclass can at most use only one abstract class.
- An abstract class can have non-abstract Methods (concrete methods) while in case of Interface all the methods have to be abstract.
- An abstract class can declare or use any variables while an interface is not allowed to do so.
So following Code will not compile: -
interface TestInterface
{
int x = 4; // Filed Declaration in Interface
void getMethod();
string getName();
}
abstract class TestAbstractClass
{
int i = 4;
int k = 3;
public abstract void getClassName();
}
It will generate a compile time error as :-
Error 1 Interfaces cannot contain fields .
So we need to omit Field Declaration in order to compile the code properly.
interface TestInterface
{
void getMethod();
string getName();
}
abstract class TestAbstractClass
{
int i = 4;
int k = 3;
public abstract void getClassName();
}
Above code compiles properly as no field declaration is there in Interface.
interface TestInterface
{
// Constructor Declaration
public TestInterface()
{
}
void getMethod();
string getName();
}
abstract class TestAbstractClass
{
public TestAbstractClass()
{
}
int i = 4;
int k = 3;
public abstract void getClassName();
}
Above code will generate a compile time error as :-
Error 1 Interfaces cannot contain constructors
So we need to omit constructor declaration from interface in order to compile our code .
Following code compiles s perfectly: -
interface TestInterface
{
void getMethod();
string getName();
}
abstract class TestAbstractClass
{
public TestAbstractClass()
{
}
int i = 4;
int k = 3;
public abstract void getClassName();
}
public interface TestInterface
{
void getMethod();
string getName();
}
Above code compiles perfectly.
It is not allowed to give any access specifier to the members of the Interface.
interface TestInterface
{
public void getMethod();
public string getName();
}
Above code will generate a compile time error as :-
Error 1 The modifier 'public' is not valid for this item.
But the best way of declaring Interface will be to avoid access specifier on interface as well as members of interface.
interface Test
{
void getMethod();
string getName();
}