Menu
Coddy logo textTech

Обзор уровней доступа

Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 10 из 87.

Модификаторы доступа управляют тем, откуда можно получить доступ к полям и методам. В Java существует четыре уровня управления доступом.

МодификаторТот же классТот же пакетПодклассВезде
privateДаНетНетНет
по умолчанию (без ключевого слова)ДаДаНетНет
protectedДаДаДаНет
publicДаДаДаДа
public class BankAccount {
    private double balance;      // Только этот класс
    String accountType;          // По умолчанию: только тот же пакет
    protected String owner;      // Тот же пакет + подклассы
    public String bankName;      // Доступно везде
}

private — самый ограничивающий модификатор; используйте его для внутренних данных, к которым никогда не следует обращаться напрямую. public — самый открытый; используйте его для методов, которые должны вызывать другие классы.

Когда вы не указываете никакой модификатор, Java использует доступ default (также называемый package-private). Это разрешает доступ только внутри того же пакета.

class Helper {           // Класс с доступом по умолчанию
    void assist() { }    // Метод с доступом по умолчанию
}

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

challenge icon

Задание

Легко

Давайте создадим систему записей Student, которая демонстрирует, как модификаторы доступа управляют видимостью в разных файлах.

Вы создадите два файла для организации вашего кода:

  • Student.java: Определите класс Student с полями, использующими разные уровни доступа:
    • private поле: studentId (String) - доступно только внутри класса Student
    • default (без модификатора) поле: grade (int) - доступно внутри того же пакета
    • protected поле: name (String) - доступно в том же пакете и в подклассах
    • public поле: school (String) - доступно везде
    Добавьте конструктор, который устанавливает все четыре поля, и public метод с именем getInfo(), который возвращает строку в формате: "[studentId] name - Grade grade at school"
  • Main.java: Создайте объект Student и продемонстрируйте, к каким полям можно обращаться напрямую извне класса. Выведите поле school напрямую, затем выведите результат метода getInfo(), чтобы показать всю информацию о студенте.

Вы получите четыре входных значения: studentId, name, grade и school (именно в таком порядке).

Ваш вывод должен состоять из двух строк: название школы, полученное напрямую, и полная информация о студенте из метода getInfo().

Шпаргалка

Модификаторы доступа управляют тем, откуда можно получить доступ к полям и методам. В Java существует четыре уровня управления доступом:

МодификаторТот же классТот же пакетПодклассВезде
privateДаНетНетНет
default (без ключевого слова)ДаДаНетНет
protectedДаДаДаНет
publicДаДаДаДа
public class BankAccount {
    private double balance;      // Только этот класс
    String accountType;          // По умолчанию: только тот же пакет
    protected String owner;      // Тот же пакет + подклассы
    public String bankName;      // Доступно везде
}

private является наиболее строгим — используйте его для внутренних данных, к которым никогда не следует обращаться напрямую. public является наиболее открытым — используйте его для методов, которые должны вызывать другие классы.

Если вы не указываете никакой модификатор, Java использует доступ по умолчанию default (также называемый package-private), который разрешает доступ только внутри того же пакета:

class Helper {           // Класс с доступом по умолчанию
    void assist() { }    // Метод с доступом по умолчанию
}

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

Попробуйте сами

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Чтение входных данных
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int grade = Integer.parseInt(scanner.nextLine());
        String school = scanner.nextLine();
        
        // TODO: Создайте объект Student с входными значениями
        
        
        // TODO: Выведите поле school напрямую (доступно, так как оно public)
        
        
        // TODO: Выведите результат getInfo(), чтобы показать всю информацию о студенте
        
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование