Инкапсуляция в Java(общедоступные переменные-члены)

Может ли кто-нибудь привести пример в java, где не реализована инкапсуляция и ее влияние.

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

Теперь, даже если мы объявим переменные-члены как открытые, каждому экземпляру (объекту) класса будет выделена отдельная память. Так что, даже если пользователь устанавливает переменную напрямую, без использования методов установки и получения, это не повлияет на другого пользователя, так как он имеет другая память выделена, верно? Так как это может создать конфликты?

Единственный сценарий будет, если есть изменения требований на более позднем этапе, такие как проверка и т. Д., Где класс должен быть изменен соответствующим образом. Так что, если кто-то может привести пример для сценария (с Java-кодом), отличного от приведенного выше, где инкапсуляция не реализована и ее влияние?

2 ответа

Просто в качестве основного примера:

public class ArrayIter{
    public int at = 0;
    public Object[] arr;

    public ArrayIter(Object[] arr){
        this.arr =  arr;
    }

    public Object next(){
        if(at >= arr.length)
            return null;

        return arr[at++];
    }
}

Теперь давайте предположим, что два объекта имеют доступ к одному и тому же экземпляру этого класса. Теперь это будет действительная операция:

ArrayIter iter = getArrIter();
iter.arr = null;

Что приведет к неожиданному поведению (NullPointerException чтобы быть точным) как только getArrIter().next() называется.

Инкапсуляция может быть описана как защитный барьер, который предотвращает случайный доступ к коду и данным другого кода, определенного вне класса. Доступ к данным и коду строго контролируется интерфейсом.

Основным преимуществом инкапсуляции является возможность изменять наш реализованный код, не нарушая код тех, кто использует наш код. С помощью этой функции Encapsulation обеспечивает удобство, гибкость и расширяемость нашего кода.

а также

Преимущества инкапсуляции:

  • Класс может иметь полный контроль над тем, что хранится в его полях.
  • Поля класса могут быть сделаны только для чтения или только для записи.
  • Пользователи класса не знают, как класс хранит свои данные. Класс может изменять тип данных поля, и пользователям класса не нужно изменять какой-либо их код.

От: http://www.tutorialspoint.com/java/java_encapsulation.htm

Другие вопросы по тегам