What is the difference between Interface, abstract class and concrete class ?