Инкапсуляция - предоставление пользователю компонентов (класс-капсула или же интерфейс) с объединенными и защищенными данными, готовыми для использования, но не для изменения или же раскрытия.
То есть, мы можем создать поле, но не хотим, чтобы кто-то его менял — добавим полю модификатор доступа приватный, но при этом предоставим возможность использовать это поле (get и set):
class Test {
private int testField;
public void setTestField(int testField) {
this.testField = testField;
}
public int getTestField() {
return testField;
}
public int getTestFieldDoubled() {
return doubleTheResult(testField);
}
private int doubleTheResult(int param) {
return param*2;
}
}
public class Main {
public static void main(String args[]) {
Test test = new Test();
test.setTestField(4);
int doubledTestField = test.getTestFieldDoubled();
System.out.println(doubledTestField); //8
}
}
Как мы видим, пользователь не может использовать закрытые (приватные) данные и методы, но мы можем с их помощью реализовывать методы для личного использования. Пользователю эти методы ни к чему.
Выводы из вышесказанного:
- Инкапсуляция обеспечивает нас набором поля-методы.
- Пользователю недоступны те методы, которые необходимы для непосредственной реализации какой-либо логики.
- Все поля должны быть приватными, а доступ к ним может быть построен через публичные методы (get и set).
- 2*4 = 8.
Весь цикл читайте на страничке Сергея Посьмашного.