Реализация двух методов совершенно одинакова, то есть в вашем случае это не имеет значения, но с точки зрения семантики, было бы более разумно иметь:
public String foo(final int x) {
return db.lookFor(x);
}
Обратите внимание на имя foo
, а не fooHidden
для ссылки на публично предоставленный метод ( скрытый в противном случае означал бы, что вы выставляете метод, который должен быть закрытым ).
Между тем, оба реализация все еще скрывает поле db
, которое должно быть скрыто от вызывающих классов и private
для класса обтекания , следовательно, инкапсулировано . Таким образом, инкапсуляция касается состояния поля, а не реализации метода .
Это означает, что структура класса в целом должна выглядеть следующим образом:
public class MyClass {
private db; // must be private, otherwise you'll be violating the encapsulation rule
public String foo(final int x) {
return db.lookFor(x);
}
}
Возвращение на вопрос ОП:
Всегда ли мне нужно писать публичные c методы + приватные методы?
Вопрос должен быть таким: Всегда ли мне нужно писать publi c + private fields ?
И я бы сказал, что в большинстве случаев ты должен сделать это да . Между тем, могут существовать требования к дизайну, которые должны нарушать правило.
Инкапсуляция, в Java, составляет около Модификаторы доступа ; что означает поля / методы , которые вы делаете доступными таким образом для публики c.
Вот что говорит Мартин Фаулер о модификаторах доступа :
Объектно-ориентированные языки делят программу на модули, называемые классами. Каждый класс содержит функции, которые состоят из данных (полей) и методов. (Не все языки используют эти термины, но они подойдут для этого.) Языки имеют различные правила о том, что другие классы могут получать доступ к функциям класса, они часто основаны на модификаторах доступа, которые применяются к классу.