Это ни хорошо, ни плохо.SubClass
здесь реализует как SuperInterface
, так и SubInterface
(а также интерфейс, определенный с помощью SuperClass
'открытых методов).Если это то, что вам нужно - это нормально.
Что касается вашего второго примера
List<SubInterface> myList;
...
for(SuperInterface si : myList) {
...
}
Вы объявили список SubInterface
элементов, но хотите извлечь из него SuperInterface
элементы.Если SubInterface
расширяет SuperInterface
, то это имеет некоторый смысл.В противном случае нет.