Look, **Interfaces are like skeletons. If you want to build a human, you should use that skeleton.** Interfaces simply create a kind of structure for your classes to denote that your class should have a defined and agree-upon structure. For example, all animals pee, eat and make sounds. Thus you can have an interface, called `IAnimal` which only mentions that classes should `Pee`, `Eat`, and `MakeSound`. Interfaces are just like simple checklists, which should either be implemented totally, or none. When you want to use `IAnimal` interface, it's just like your boss telling you "Hey, don't create a Cat class unless you write some methods for it to eat, pee, and make sound". **Abstract classes are like skeletons, but with some meet on them too. It's just there to make your work easier.** You can consider an abstract class to be an interface, which already has some implementation. That was the plain English answer. But after getting that, please study more, to get the real concept.