Модификаторы доступа (private, public)

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Модификаторы доступа в Java управляют видимостью полей и методов. Самые частые — public (доступно отовсюду) и private (доступно только внутри класса). Это основа капсуляции: скрываем внутренние детали и даём безопасный интерфейс через методы (часто геттеры/сеттеры). В задачах java онлайн это помогает делать код устойчивым и понятным: меньше случайных изменений, проще тесты и поддержка. В уроках и тренажере будет тренировка на чтение кода и выбор правильной области доступа.

Пример:

class User {
private String name;
public String getName() { return name; }
}

Список тем

1. Сопоставь модификатор и видимость

id: 40482_am_01_compare_access

Сопоставьте модификаторы доступа в Java с описаниями их областей видимости. Каждому модификатору из левой колонки соответствует ровно одно описание из правой. Обратите внимание, что в правой колонке описания представлены в случайном порядке, и все они уникальны.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
private
public
protected
без модификатора (package-private)
Виден внутри пакета и в подклассах (даже если подкласс в другом пакете)
Виден только внутри класса
Виден везде (внутри пакета и вне его)
Виден только внутри пакета
Сообщения
Проверить
Показать подсказку

2. Собери класс с приватным полем и публичным методом

id: 40482_am_02_select_fill_private_field

В этом задании вам предстоит собрать корректный класс Person, демонстрирующий принцип инкапсуляции. В коде класса есть три пропуска: модификатор доступа для поля, модификатор доступа для метода и обращение к полю внутри метода. Используя выпадающие списки, выберите подходящие варианты, чтобы класс соответствовал принципам капсуляции — скрывал внутреннее состояние объекта и предоставлял контролируемый доступ через публичный метод. Обратите внимание на различия между модификаторами private, public и protected, а также на способы доступа к полю внутри самого класса.

Нужно правильно расставить в пропуски предложенные варианты
class Person {
    input1S String name;

    input2S void printName() {
        System.out.println(input3S);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Исправь нарушение private-доступа

id: 40482_am_03_error_direct_access

В данном фрагменте кода Java представлены два класса: Person и Main. Класс Person имеет приватное поле name, доступ к которому должен осуществляться только через публичные методы. Однако в классе Main происходит попытка прямого доступа к приватному полю name объекта Person. Найдите строку с нарушением принципа инкапсуляции и исправьте её, используя корректный способ доступа к полю name. Помните, что поле name должно оставаться скрытым (private).

Найдите ошибку и исправьте
class Person {
    private String name;
    public Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice");
        System.out.println(person.name);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Заполни пропуски в правилах доступа

id: 40482_am_04_replace_visibility

В этом задании вам предстоит заполнить пропуски в таблице, описывающей правила видимости модификаторов доступа в Java. Таблица содержит четыре строки, соответствующие разным уровням доступа: public, protected, модификатор по умолчанию (package-private) и private. Вам необходимо вписать в пропуски правильные ключевые слова (public, private) или оставить поле пустым для случая 'без модификатора', чтобы таблица точно отражала область видимости каждого модификатора. Обратите внимание на видимость внутри класса, внутри пакета, через наследование в другом пакете и глобальную видимость.

Заполните пропуски
Модификатор доступа Видимость внутри класса Видимость внутри пакета Видимость через наследование (в другом пакете) Видимость везде
input1S Да Да Да Да
input2S Да Да Да Нет
без модификатора Да Да Нет Нет
input3S Да Нет Нет Нет
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Скомпилируется ли код с private методом?

id: 40482_am_05_predict_result_compile

Проанализируйте приведенный код на Java, содержащий два класса. Определите, скомпилируется ли данный код успешно, или возникнет ошибка компиляции. Обратите особое внимание на модификаторы доступа методов.

Выберите правильный вариант ответа
class Printer {
    private void printMessage() {
        System.out.println("Сообщение из Printer");
    }
}

class MainApp {
    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.printMessage();
    }
}
Сообщения
Проверить
Показать подсказку

6. Разметь модификаторы доступа

id: 40482_am_06_highlight_parts_modifiers

В данном фрагменте кода Java выделены несколько элементов. Для каждого выделенного сегмента определите его тип: «модификатор доступа», «тип данных», «имя метода или поля» или «другое» (например, ключевое слово class). Обратите внимание на ключевые слова public, private, protected и их отсутствие.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
{{public~|~t1}} class Student {
    {{private~|~t2}} {{int~|~t3}} {{age~|~t4}};
    {{protected~|~t5}} {{String~|~t6}} {{name~|~t7}};

    {{public~|~t8}} {{void~|~t9}} {{setAge~|~t10}}(int newAge) {
        age = newAge;
    }
}
Другое
Модификатор доступа
Имя метода/поля
Тип
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру