Рубрики
Без рубрики

Java ‘частный’ Модификатор доступа

Узнайте больше о «частном» модификаторе доступа на Java.

Автор оригинала: baeldung.

1. Обзор

На языке программирования Java поля, конструкторы, методы и классы могут быть отмечены модификаторы доступа . В этом учебнике мы поговорим о частные модификатор доступа в Java.

2. Ключевое слово

частные Модификатор доступа важен тем, что позволяет скрывать инкапсуляцию и информацию, которые являются основными принципами объектно-ориентированного программирования. Инкапсуляция отвечает за методы и данные комплектации, в то время как сокрытие информации является следствием инкапсуляции – она скрывает внутреннее представление объекта.

Первое, что нужно помнить, что элементы, объявленные частные доступ может быть доступ только к классу, в котором они объявлены .

3. Поля

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

Во-первых, давайте создадим Сотрудник класс, содержащий пару частные переменные экземпляра:

public class Employee {
    private String privateId;
    private boolean manager;
    //...
}

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

4. Конструкторы

Давайте создадим частные конструктор:

private Employee(String id, String name, boolean managerAttribute) {
    this.name = name;
    this.privateId = id + "_ID-MANAGER";
}

Отмечая нашего конструктора как частные , мы можем использовать его только изнутри нашего класса.

Давайте добавим статический метод, который будет нашим единственным способом использовать это частный конструктор из-за пределов служащий класс:

public static Employee buildManager(String id, String name) {
    return new Employee(id, name, true);
}

Теперь мы можем получить менеджер экземпляр нашей Сотрудник класса, просто написав:

Employee manager = Employee.buildManager("123MAN","Bob");

И за кулисами, конечно, buildManager метод называет нашу частные конструктор.

5. Методы

Теперь добавим частные метод для нашего класса:

private void setManager(boolean manager) {
    this.manager = manager;
}

И предположим, что почему-то в нашей компании есть произвольное правило, в котором только сотрудник по имени «Карл» может быть повышен до менеджера, хотя другие классы об этом не знают. Мы создадим общественные метод с некоторой логикой для обработки этого правила, которое вызывает нашу частные метод:

public void elevateToManager() {
    if ("Carl".equals(this.name)) {
        setManager(true);
    }
}

6. частные в действии

Давайте посмотрим пример того, как использовать наши Сотрудник класс со стороны:

public class ExampleClass {

    public static void main(String[] args) {
        Employee employee = new Employee("Bob","ABC123");
        employee.setPrivateId("BCD234");
        System.out.println(employee.getPrivateId());
    }
}

После выполнения ПримерКласс , мы увидим его выход на консоли:

BCD234_ID

В этом примере мы использовали общественные конструктор и общественные метод changeId (customId) потому что мы не можем получить доступ к частные переменная privateId прямо.

Давайте посмотрим на что произойдет, если мы попытаемся получить доступ к частные метод, конструктор или переменный из-за пределов нашей Сотрудник класс:

public class ExampleClass {

    public static void main(String[] args) {
        Employee employee = new Employee("Bob","ABC123",true);
        employee.setManager(true);
        employee.privateId = "ABC234";
    }
}

Мы получим ошибки компиляции для каждого из наших незаконных заявлений:

The constructor Employee(String, String, boolean) is not visible
The method setManager(boolean) from the type Employee is not visible
The field Employee.privateId is not visible

7. Классы

Существует один особый случай, когда мы можем создать частные класс – как внутренний класс какого-то другого класса. В противном случае, если бы мы объявили внешний класс частные , мы бы запретили другим классам доступ к нему, что делает его бесполезным:

public class PublicOuterClass {

    public PrivateInnerClass getInnerClassInstance() {
        PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass();
        myPrivateClassInstance.id = "ID1";
        myPrivateClassInstance.name = "Bob";
        return myPrivateClassInstance;
    }

    private class PrivateInnerClass {
        public String name;
        public String id;
    }
}

В этом примере мы создали частные внутренний класс внутри нашего PublicOuterClass указав частные модификатор доступа.

Потому что мы использовали частные ключевое слово, если мы, по некоторым причинам, попытаться мгновенно наши PrivateInnerКласс из-за PublicOuterClass , код не будет компилироваться, и мы увидим ошибку:

PrivateInnerClass cannot be resolved to a type

8. Заключение

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

Как всегда, пример кода доступен более на GitHub .