Предполагая, что вы не намереваетесь сделать этот API-интерфейс обычным (то есть вы не отправляете его третьим лицам и ожидаете, что он его использует), вы можете сделать следующее.
Учитывая, что вам (возможно) требуется доступ к конкретным методам TreeMap, но вы также можете позднее решить изменить наследование на что-то отличное от TreeMap, если вы не пишете код, который зависит от того, какой класс является TreeMap Например, никогда не ссылайтесь на TreeMap, кроме «extends TreeMap»), тогда вы можете безопасно использовать extends. Для этого потребуется написать интерфейс, предоставляющий методы TreeMap.
Если вы обнаружите, что не хотите подавать в суд на TreeMap и хотите использовать что-то еще позже, поскольку вы нигде не обращаетесь к TreeMap, это будет хорошо. Затем у вас останутся все вызовы к конкретным методам TreeMap ... если все они исчезнут в то же самое время, когда вы больше не выходите из TreeMap, тогда вам пора. Если этого не произойдет, вам нужно будет написать свой собственный способ реализации необходимых вам методов.
Чтобы узнать, что вам нужно или нет, если вы перешли с TreeMap, вы бы закомментировали все методы, которые вы добавили в созданный вами интерфейс, если код компилируется с пустым интерфейсом, который вам подходит, если нет добавить недостающие методы обратно в интерфейс. Если класс, который вы решили расширить, не содержит отсутствующих методов, которые вам нужно выполнить (или вам пришлось расширяться из TreeMap).
Альтернативное решение состоит в том, чтобы заранее выяснить, действительно ли вам понадобится TreeMap. Я не уверен, что хотел бы зайти слишком далеко в проект, где я не был уверен в том, что мне нужно для моих структур данных.