 <p>This makes it easier when defining method return types such as this:</p> <pre><code>class A&lt;B extends A&lt;B&gt;&gt; { public B getMe(){ return (B) this; } } </code></pre> <p>This tells Java compiler that you are in <code>getMe()</code> method returning a subclass of class <code>A</code>.</p> <pre><code>class C extends A&lt;C&gt; { } C c = new C(); c.getMe(); //returns C </code></pre>