You can provide the type dynamically, however the compiler doesn't do this for you automagically.
public abstract class LastActionHero<H extends Hero>(){
protected final Class<H> hClass;
protected LastActionHero(Class<H> hClass) {
this.hClass = hClass;
}
// use hClass how you like.
}
BTW: It not impossible to get this dynamically, but it depends on how it is used. e.g
public class Arnie extends LastActionHero<MuscleHero> { }
It is possible to determine that Arnie.class has a super class with a Generic parameter of MuscleHero.
public class Arnie<H extend Hero> extends LastActionHero<H> { }
The generic parameter of the super class will be just H
in this case.