- it is like abstract classes but allows child classes to implement multiple classes
- cannot define variables (data members) in an interface or constructor functions
- only public functions can be defined, no private and protected functions can be defined