I'm designing a language somewhat similar to Java and I want to create something similar to IOperation in baseLanguage. What I'm trying to decide is whether I should have an Operation abstract concept that all operations extend, or I should have an IOperation interface concept that all operations implement. I'm wondering why in baseLanguage, something like operations begin at an interface concept while something like expressions begin at an abstract concept. What would have happened if all operations had to extend an abstract concept Operation?
What are the design tradeoffs between interface concepts and abstract concepts?