Метод указывает, что существует T, расширяющий Root, который является типом возврата.Однако, пока метод не используется где-то, вы не знаете, какой это класс.Вы не знаете, будет ли T А, или В, или что-то еще.Каждый раз, когда он используется, это будет ровно один подкласс Root.
Но здесь ваш код предполагает, что это будут и A, и B одновременно.На самом деле, Т может быть ни тем, ни другим.Если T является A, вы не можете вернуть экземпляр B. Если T является B, вы не можете вернуть экземпляр A. Если T не является ни A, ни B, вы не можете вернуть ни экземпляр A, ни B.
Вы должны вернуть экземпляр T.
Одна вещь, которую вы можете сделать, это не использовать дженерики и просто вернуть Root.