Единственная причина - «не обязательно», поэтому зачем ее поддерживать?
Синтаксически нет оснований запрещать внутреннему классу создавать статические элементы. Хотя экземпляр Inner
связан с экземпляром Outer
, по-прежнему можно использовать Outer.Inner.myStatic
для ссылки на статический член Inner
, если java решает это сделать.
Если вы нужно поделиться чем-то среди всех экземпляров Inner
, вы можете просто поместить их в Outer
как статические члены. Это не хуже, чем вы используете статические члены в Inner
, где Outer
все равно может получить доступ к любому частному члену Inner
в любом случае (не улучшает инкапсуляцию).
Если вам нужно поделиться чем-то среди все экземпляры Inner
, созданные одним объектом outer
, имеют смысл помещать их в класс Outer
как обычные члены.
Я не согласен с мнением о том, что «статический вложенный класс - это всего лишь класс высшего уровня ». Я считаю, что лучше всего рассматривать статический вложенный класс / внутренний класс как часть внешнего класса, потому что они могут обращаться к закрытым членам внешнего класса. А члены внешнего класса также являются «членами внутреннего класса». Поэтому нет необходимости поддерживать статический член во внутреннем классе. Обычный / статический член во внешнем классе будет достаточным.