JLS §4.9 определяет типы пересечений и их членов с помощью понятия условного класса .В вашем конкретном случае условный класс:
class <notional> extends FooSupport implements FooInterface {}
Обратите внимание на пустое тело класса.
Под абзацем JLS подразумевается, что условный класс должен быть правильно сформирован илипроисходит ошибка компиляции.Ясно, что класс, который наследует защищенную реализацию для метода открытого интерфейса, сформирован неправильно.
Я согласен с тем, что может быть другими способами указания типа пересечения, который допускал бы неизвестные подклассыFooSupport, который разрешит вышеуказанный конфликт, переопределив метод с общедоступной видимостью.
Я считаю, что стиль определения через условный класс был выбран, чтобы держать сложность в страхе.Посмотрите, как краткое §4.9 по сравнению с другими определениями.
PS: ecj также отклоняет ваш пример, говоря:
Унаследованный метод IntersectionBug.FooSupport.foo () не может скрытьоткрытый абстрактный метод в IntersectionBug.FooInterface