Мне кажется, что возможность изменять параметры напрямую - это потенциальная ошибка в коде (кто-то может неправильно их использовать), также методы гет и сет выглядят более лаконично, например из-за того, что вы даете другому программисту информацию о том, что можно сделать с данным классом, а не сухую переменную.
Также методы гет и сет можно модифицировать таким образом, чтобы они проверяли или изменяли входящие и выходящие данные как нужно, как примитивный пример - метод гетНейм, который берет строку ФИО и извлекает имя, без этого метода программисту-пользователю делать надстройки над классом для извлечения имени.