title: Why an abstract class implementing an interface can miss the declaration/implementation of one of the interface's methods?
body: <p>A curious thing happens in Java when you use an abstract class to implement an interface: some of the interface's methods can be completely missing (i.e. neither an abstract declaration or an actual implementation is present), but the compiler does not complain.</p>
  
  <p>For example, given the interface:</p>
  
  <pre><code>public interface IAnything {
    void m1();
    void m2();
    void m3();
  }
  </code></pre>
  
  <p>the following abstract class gets merrily compiled without a warning or an error:</p>
  
  <pre><code>public abstract class AbstractThing implements IAnything {
    public void m1() {}
    public void m3() {}
  }
  </code></pre>
  
  <p>Can you explain why?</p>