abstraction interfaces and classes