what is the difference between interface and abstract class? OOP principles? What are access modifiers?