<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>

That's because if a class is abstract, then by definition you are required to create subclasses of it to instantiate.  The subclasses will be required (by the compiler) to implement any interface methods that the abstract class left out.
Following your example code, try making a subclass of
```
AbstractThing
```
without implementing the
```
m2
```
method and see what errors the compiler gives you.  It will force you to implement this method.