Увидел нечто подобное у своего коллеги =)
public class X { static class A<T extends A<T>> { public T createObejct() { return null; } } static class B extends A<B> { public B createObejct() { return null; } } public static void main(String[] args) { new B().createObejct(); } }