Для чего используются геттеры и сеттеры в Java?
Вопрос, кстати, очень даже не глупый.
Вы абсолютно правильно заметили насчет нарушения инкапсуляции гетерами и сеттерами, но никто же не заставляет вас их писать. Если вы считаете, что объет должен быть иммутабельным - устанавливаете все поля final и инициализируете их только через конструктор. Насчет геттеров - тоже, в зависимости от бизнес-логики, не всегда они нужны.
По этой теме почитайте литературу про ООП (например "Объектно ориентированный подход" Вайсфельда).
И еще, например, Егор Бугаенко по этой теме имеет мнение (относиться к нему стоит со здоровым скептицизмом).
https://www.youtube.com/watch?v=lfdAwl3-X_c&t
но зачем тогда ставить уровень доступа private на переменные, если все равно через геттеры и сеттеры можно их считать из другого класса.
1. Например чтобы можно было внутрь сеттера добавить какую-нибудь логику по валидации, к примеру.
2. Чтобы можно было использовать их совместно с интерфейсами