А ещё есть выделение публичного API.
Если твою либку, к примеру, до фига людей юзает, то лучше бы тебе с апдейтами версий не менять
публичные методы, поля и прочее.
То бишь публичными методами ты описываешь своё API, и ими все пользуются, а приватные - это всякие имплементации и внутренности, и ты будешь полностью в своём праве менять их как угодно.
Есть такая штука,
семантическое версионирование, это когда версии твоего кода выглядят как x.y.z, где x - мажорная версия, y - минорная и z - патч.
Большинство FOSS ему следует, и ему надо следовать, очень полезная штука.
Оно описывает, что в процессе создания своего продукта, z ты увеличиваешь, если апи не меняется, y - если дополняется (добавил ещё публичных елементов, не меняя старых) и z - если таки пришлось изменить публичное апи.
Подробнее по ссылке крч.
Майнкрафт нихренашечки ему не следует, Фордж старается.
А да, ещё конкретно в джавке вообще все поля обычно делаются приватными и по желанию им делаются геттеры-сеттеры, потому-что во-первых так принято, во-вторых в жабке нету пропертей которые таким образом мимикрируются, ну и ещё я вроде слышал что там какая-то штука с многопоточностью.
Ну и опять же в рамках публичного апи, ты можешь сделать геттер, но менять поле только внутри класса, просто полю нельзя отдельно менять публичность получения и выставления его значения (ну в принципе это я и имел ввиду когда когорил про мимикрию пропертей из шарпов там всяких (да котлинов, которые сами взяли половину няшностей из шарпов) ).
А ещё всякие прекондишены и ограничения, ну это выше писали (и в пропертях такое тоже есть).