Если S является типом интерфейса, то:
Если T является типом класса, то T должен быть Object (§2.4.7).
Если T является типом интерфейса, то T должен быть тем же интерфейсом, что и S, или суперинтерфейсом S (§2.13.2).
Мне кажется, это понятно: интерфейс может быть преобразован в расширенный интерфейс. Этот случай используется, например, когда вы вызываете сериализацию для DataInputStream: интерфейс DataInputStream реализует Serializable, поэтому мы приводим объект к Serializable, даже не зная, что является реализованным классом объекта.