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

Одним из основных принципов объектно-ориентированного программирования является «скрытие информации», что означает, что объекты не раскрывают все их детали внешнему миру. Подобно другим объектно-ориентированным языкам программирования, Java имеет модификаторы доступа для ограничения доступа к классам, чертам, объектам и пакетам. Модификаторы доступа определяют, какая часть объекта видима для остальной части программы Java, а пакеты обеспечивают самый высокий уровень контроля над видимостью объекта. Например: класс, который не является общедоступным, не отображается вне его собственного пакета. В Java-языке доступно 4 разных модификатора доступа. Они являются общедоступными, защищенными, частными и без модификатора (объявляя без модификатора доступа). Использование «не модификатора» также иногда упоминается как «пакет-частный» или «дефолт» или «удобный» доступ.

 
private - accessible to the classes only.
protected - accessible to class, package, and subclasses
[default] - accessible to the class and package
public - accessible to global

private в Java

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

 
public class Bill {
    private long total = 0;
}

protected в Java

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

 
public class Bill {
    protected long total = 0;
}

[default] в Java

default - не ключевое слово, а public, private, protected - это ключевые слова. В пакете видны члены или члены по умолчанию, не имеющие модификатора доступа. И они унаследованы только к подклассам, которые находятся в одном пакете. Это означает, что они не наследуются и не видны вне пакета. Использование «default» также иногда называется «package-private» или «no modifier» или «friendly» access.

 
public class Bill {
    long long total = 0;
}

В приведенном выше примере полное поле в классе Bill не имеет модификатора доступа, а это означает, что ему неявно назначен модификатор доступа по умолчанию.

public в Java

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

 
public class Bill {
    public long total = 0;
}

ПРИМЕЧАНИЕ. Если у метода нет модификатора доступа, мы можем получить доступ к нему только во всех классах одного и того же пакета.

Может ли класс верхнего уровня быть закрытым или защищенным

Нет. Класс верхнего уровня как закрытый был бы совершенно бесполезен, потому что ничто не имело бы к нему доступа. Если класс верхнего уровня объявлен как закрытый, компилятор будет жаловаться, что «модификатор private здесь не разрешен».

Можем ли мы определить частные и защищенные модификаторы для переменных в интерфейсах?

Интерфейс похож на план любого класса, где вы объявляете своих членов. Любой класс, реализующий этот интерфейс, отвечает за его определение. Наличие частных или защищенных членов в интерфейсе концептуально не имеет смысла.

Источник: http://net-informations.com/Java/basics/modifiers.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector