Как отмечали многие другие, ограничение здесь не имеет ничего общего с тем, что ваш класс является абстрактным, а скорее с модификатором видимости, который вы выбрали для использования.Помните, что означает каждый из этих модификаторов видимости:
Для класса, в котором вы используете ключевое слово ...
private: Виден только этому классу
(по умолчанию / пакет private): Виден только этому классу и классам в его пакете
защищено: Доступно для этого класса, классов в его пакете и подклассов этого класса
public: Доступно для любого класса
Классы верхнего уровня не могут быть объявлены private , потому что тогда ничто никогда не сможет получить к ним доступ.
Но вашВопрос заключается в том, почему они не могут быть объявлены защищенными .Ясно, что защищенный класс верхнего уровня (если бы он мог существовать) был бы видим для себя (каждый класс виден для себя).Также ясно, что защищенный класс верхнего уровня будет виден классам в его пакете.Однако сделать его видимым для его подклассов довольно сложно.Каким классам должно быть разрешено наследовать наш защищенный класс?
Если это все они, тогда наш класс может быть также public , потому что тогда мы говорим, что любой класс имеетправо доступа к нашему защищенному классу.Если это не один из них, то наш класс также может быть package-private , поскольку выполняются только два других условия (видимых для себя и вещей в его пакете).И это не может быть «некоторые из них», так как нам нужен способ определить, какие классы могут получить к нему доступ, для чего вообще нужен модификатор видимости.
Итак, по этим причинам,классы верхнего уровня не могут быть личными или защищенными ;они должны быть частными пакетами или общедоступными .