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