Поля: потому что вы можете определить поля в любом интерфейсе. Они всегда неявно публикуются c, stati c и final: другими словами, для определения констант в пространстве имен интерфейса.
Ответ по существу одинаков для классов: это публичный c, stati c (но не окончательный) класс. это просто пространство имен, в котором можно определить класс.
Чтобы перевернуть вопрос: почему не должно вы можете сделать это?
Там это всевозможные синтаксически правильные вещи, которые вы можете сделать, которые вы считаете необоснованными. Например:
String String = "String"; String: break String;
допустимо, но бесполезно и сбивает с толку. Здесь есть 3 различных значения String
, 4, если считать литерал. Это гораздо менее полезно, чем элементы аннотаций, но также допускается.
Иногда требуется попытка остановить выполнение каких-либо действий: это усложняет язык и приводит к компиляции; и в попытке предотвратить странное безумие вы можете случайно удалить полезную выразительность.