Java generics - substituindo um método abstrato e tendo o tipo de retorno da subclasse

Estou tentando criar uma configuração em que um conjunto de subclasses substitui uma superclasse. Essa superclasse contém um método abstrato - cujo tipo de retorno seria idealmente o objeto a partir do qual esse método foi chamado, de forma que ele se comporte efetivamente da seguinte maneira:

public abstract class SuperClass{
  public abstract SuperClass getSelf();
}

public class SubClass extends SuperClass{
  @Override
  public SubClass getSelf(){
    return this;
  }
}

Eu não tenho certeza se isso é possível, pois acho que os tipos de retorno sempre precisam ser os mesmos para que a substituição funcione - no entanto, estive pensando que a resposta, se existir, se encontra em algum lugar nessa linha ...

public abstract class SuperClass{
  public abstract <? extends SuperClass> getSelf();
}

public class SubClass extends SuperClass{
  @Override
  public SubClass getSelf(){
    return this;
  }
}

Obrigado por qualquer ajuda

edit: adicionado estende SuperClass para SubClass, duh

questionAnswers(3)

yourAnswerToTheQuestion