Interfaces

Interfaces are a powerful abstraction tool in software engineering. They create contracts between classes or structs (depending on language) and enable polymorphism. Polymorphism is a principle tenant of object-oriented programming.