
class Result1 implements SimpleResult {
    public int test() { return 1; }
}
class OtherResult implements AbstractResult {
    public int test() { return 2; }
}

public class SimpleDemo<Request extends AbstractResult, Response extends AbstractResult> 
extends AbstractDemo<Request, Response> {

    @Override
    protected SimpleResult test(AbstractResult request) {
        return new Result1();
    }
    
    public static void main(String... args) {
        AbstractDemo<OtherResult,OtherResult> demo = new SimpleDemo<>();
        OtherResult result = demo.test(new OtherResult());
    }

}