Возможно, потому что расширение его и перезапись некоторых его методов, вероятно, сломало бы его. И упрощение перезаписи методов будет представлять большую часть внутренней работы, поэтому, если в будущем они решат изменить их (для производительности или по другим причинам), им будет сложнее изменить класс, не нарушая все классы. что расширить его.
Например, рассмотрим следующий метод в классе:
public boolean nextBoolean() {
clearCaches();
return Boolean.parseBoolean(next(boolPattern()));
}
Скажем, вы хотите перезаписать это, потому что вы хотите, чтобы 'awesome' оценивался как 'true' boolean (по любой причине). Если вы перезаписаете его, вы не сможете вызвать super.nextBoolean (), поскольку он будет использовать следующий токен с использованием логики по умолчанию. Но если вы не вызовете super.nextBoolean (), clearCaches () не будет вызываться, возможно, нарушая другие не перезаписанные методы. Вы не можете вызывать clearCaches (), потому что это личное. Если бы они сделали это защищенным, но потом поняли, что это вызывает проблемы с производительностью, и хотели новую реализацию, которая больше не очищает кеши, то они могут сломать вашу перезаписанную реализацию, которая все равно будет вызывать это.
Так что, в принципе, они могут легко изменять скрытые части внутри класса, которые являются довольно сложными и защищают вас от создания сломанного дочернего класса (или класса, который можно легко сломать).