Обобщенные методы Java. Почему extends а не implements?

Читаю Г.Шилдта тема "Обобщенные методы". Там приводится такой пример обобщённого метода:

static <T extends Comparable<T>, V extends T> boolean arraysEqual(T[] x, V[] y) { 
// ...
}

и пояснение к нему:

"... Также обратите внимание на то, что T наследует интерфейс Comparable. Интерфейс Comparable определен в пакете java.lang."

На сколько мне было известно, интерфейс может быть расширен (extends) только другим интерфейсом.

Почему тогда "<T extends Comparable" из приведённого выше кода - валидно? Ведь Comparable это интерфейс, а под Т подразумевается НЕ интерфейс, а класс например. И в пояснении написано именно: - "T наследует интерфейс Comparable" ? Почему extends а не implements? Подскажите, в чём логика?

P.S. Я конечно подозреваю, что "Т" !== класс ("T" это "параметр типа") может с этим связано, но если бы там написали implements, то вопроса бы не возникло.


Ответы (1 шт):

Автор решения: Aziz Umarov

Все дело в самом языке. К примеру C# вовсе не указывает что он наследует, а что реализует тупо перечисляет. Если интерфейс то нужно имплементировать, а если класс то наследует. Так вот с математичкой (она же логическая) точки зрения особо разницы нет что использовать extends или implements. Вот на дженериках Java это явно заметно.

→ Ссылка