Interfaces
An Interface defines a set of methods that a type must implement in order to be considered that interface. Think of it like a contract - if a type implements all of the methods in an interface, it can be used wherever that interface is expected. This allows us to write more flexible and reusable code.
If an object implements the methods in an interface, it can be used as that interface.
Kind of like, if it looks like a duck and quacks like a duck, it's probably a duck.