Задача

3/6

Модификаторы доступа

Теория Нажмите, чтобы прочитать/скрыть

Модификаторы доступа
По умолчанию все поля и методы класса в Java приватные. Это значит, что никто не может получить доступ к ним, а значит за пределами объектов этого класса никакой метод не сможет использовать поля и методы объектов этого класса.

Поля и методы можно сделать публичными с помощью модификатора доступа public. Существует еще модификатор private, который делает поле приватным. Он необязателен, так как все поля и методы приватные по умолчанию. Вот пример использования модификаторов public и private.
class Book
    {
        public String name;
        String authorName;
        private int ageRequirement;
        String text;
        public int pageCount;
        int getTextLength()
        {
            return text.length();
        }

        public int getAverageLetterCount()
        {
            return getTextLength() / pageCount;
        }

        private int getDifficuiltyLevel()
        {
            return 5 * ageRequirement * text.Length();
        }

    }

В этой версии класса Book поля name и pageCount стали открытыми для чтения и модификации в других объектах. Метод getAverageLetterCount() также доступен для вызова из объектов других классов. Все остальные поля и методы остаются приватными и доступны только в методах этого класса. В публичном методе getAverageLetterCount() мы можем вызвать приватный метод getTextLength(), так как getAverageLetterCount() принадлежит самому классу. А вот из метода другого класса сделать так не выйдет.

Но зачем тогда делать поля приватными? В коде на Java вы будете встречать в основном только приватные поля. Дело в том, что если доступ к приватным полям будет осуществляться через публичные методы объекта, то при любом таком доступе к приватным полям можно будет осуществлять дополнительные действия и проверки. Подробнее про это будет в уроке про инкапсуляцию.

Задача

Возьмите класс Book из предыдущей задачи и сделайте все поля класса приватными. Удалите все методы, которые сейчас в нем есть.

1) Создайте публичный метод с именем setText (возвращаемый тип void) и одним аргументом newText, который будет менять значение text на newText.
2) Добавьте приватный метод getWordsCount, который будет считать число слов в тексте и возвращать его как int.
Слово — последовательность каких-либо символов, среди которых нет пробела. Гарантируется, что несколько пробелов подряд идти не может.