Защищенные методы в Java - PullRequest
0 голосов
/ 22 октября 2011

Зачем нам нужны методы защищенного модификатора, когда мы можем напрямую установить переменную в защищенное?

Например: в приведенном ниже коде они устанавливают для переменной экземпляра SocialSecurityNumber значение private и определяют метод защищенного установщика для установки его значения? Почему мы не можем напрямую установить переменную SocialSecurityNumber для защищенного?

public class SSNWrapper {

    private int SocialSecurityNumber ;

    public SSNWrapper (int ssn) { socialSecurityNumber = ssn ;}
    public int getSSN () { return SocialSecurityNumber; }
    protected void setSSN(int SSN) { socialSecuritynumber = ssn ; }

}

Ответы [ 3 ]

3 голосов
/ 22 октября 2011

В этом конкретном примере не будет большой разницы.В реальной жизни метод setSSN, вероятно, должен выглядеть примерно так:

protected void setSSN(int SSN) throws InvalidSSNException {
  // check that the given SSN is valid
  // ...
  socialSecurityNumber = ssn;
}

Это позволяет базовому классу гарантировать, что он содержит только действительные номера SSN.Базовый класс не может гарантировать, что если поле защищено.

1 голос
/ 22 октября 2011

Из учебника по модификаторам доступа:

Советы по выбору уровня доступа:

Если другие программисты используют ваш класс, вы хотите, чтобы ошибки от неправильного использования не возникали.Уровни доступа могут помочь вам в этом.

Используйте наиболее ограниченный уровень доступа, который имеет смысл для конкретного участника.Используйте личное, если у вас нет веских причин не делать этого.

Избегайте открытых полей, кроме констант.(Во многих примерах из учебника используются открытые поля. Это может помочь в сжатой иллюстрации некоторых моментов, но не рекомендуется для производственного кода.) Открытые поля, как правило, связывают вас с конкретной реализацией и ограничивают вашу гибкость при изменении кода.

Краткая версия: он запрещает другим классам изменять данные в классе, который объявляет переменную экземпляра private.

0 голосов
/ 22 октября 2011

Потому что иногда вам нужно изменить операцию, которая получает или устанавливает это значение. Например, вам нужно рассчитать это значение. Или установите другое значение. Или запустить слушатель или что-то в этом роде ... Так что это даст вам больше гибкости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...