Если у меня есть Java-класс, который является закрытым для пакета (объявлен с "class", а не с "public class"), то на самом деле нет никакой разницы, если методы внутри объявлены как public или protected или package-private, верно?
Ну, может быть, не сразу. Но если вы затем (или в будущем) объявите «защищенный» или «публичный» класс, который наследует от класса package-private, тогда видимость членов исходного класса do имеет значение.
Как указывает @kmccoy, объявление класса как final устраняет возможность подклассов.
Но это действительно только оформление витрин. Если вы затем решите, что вам действительно нужно создавать подклассы, вы просто удалите final
... и тогда вы вернетесь в ситуацию, когда выбор модификаторов доступа имеет значение.
ИМО, суть в том, что вы должны выбрать наиболее подходящие модификаторы ... даже если это сейчас не нужно. Если ничего другого, то ваш выбор модификаторов должен задокументировать ваше намерение относительно того, где лежат границы абстракции.