 <p>First of all, inheritance in interfaces is OK, it applies in the same way as it does for class inheritance and is a very powerful tool.</p> <p>Interfaces describe behavior, let's say an interface defines what a class "can do" so if you implement an interface you are declaring you can do what that interface specifies. For example:</p> <pre><code>interface ISubmergible { void Submerge(); } </code></pre> <p>So is obvious, if the class implements the interface then it can submerge. Some interfaces nonetheless imply other interfaces, for example, imagine this interface</p> <pre><code>interface IRunner { void Run(); } </code></pre> <p>That defines an interface that indicates that the class implementing it can run... nonetheless, in the context of our program is understood that, if something can run it can obviously walk, so you want to make sure that is fulfill:</p> <pre><code>interface IWalker { void Walk(); } interface IRunner : IWalker { void Run(); } </code></pre> <p>Finally, about the whole NotImplementedException thing... I'm amazed with some of the suggestions. A NotImplementedException should <strong>never, ever</strong>, be raised by an interface method of a class. If you implement an interface your are explicitly accepting the contract that interface establishes, if you raise a NotImplementedException you are basically saying "ok, I lied, I told you I supported the interface but I really don't".</p> <p>Interfaces are meant to avoid having to worry about what the class implements and what doesn't. If you take that away they are useless. Much more important, <strong>your fellows will expect such behavior, even if you understand what you're doing the rest of your team won't</strong> and even you, 6 months from now won't understand the logic beneath it. <strong>So class2 violates common sense and interface purpose.</strong> Class2 does not implement the IBase so don't claim it does.</p>