Почему механизм контроля доступа, разработанный на Java? Есть две основные функции:
(1) Чтобы пользователи избегали прикосновений к деталям, которые они не должны касаться, эти части необходимы для внутренних операций, но они не являются частью интерфейса, требуемого клиентским программистом.
(2) Чтобы позволить дизайнерам библиотеки классов изменить внутреннюю работу классов, не беспокоясь о значительном влиянии на пользователей.
Уровень контроля разрешений на доступ в Java:
Public -> защищен -> Доступ к пакетам (без модификатора разрешения) -> private.
1. Пакет
Концепция пакетов в Java очень похожа на концепцию пространств имен в C ++, и оба могут ограничить объем классов. Самое большое различие между ними заключается в том, что пакеты в Java неявно указывают иерархию дерева класса (а также структуру каталогов файла исходного кода Java). Преимущество этого заключается в том, что уникальность класса может быть ограничена требованиями к уникальности пути файла в файловой системе.
1. Кодовая организация
При написании файла исходного кода Java (.java file) этот файл обычно называют компиляционным блоком. Больше всего одного публичного класса разрешен в подразделении компиляции, а имя класса должно быть точно таким же, как и имя файла (включая верхний и нижний чехол).
При составлении файла .java каждый класс в файле .java будет иметь выходной файл .class, а имя файла и имя класса одинаковы. Программа Java Runnable - это набор файлов .class, которые можно упаковать и сжать в файл документа Java (пакет JAR с использованием генератора документов Java). Интерпретатор Java отвечает за поиск, загрузку и интерпретацию этих файлов.
Библиотека классов на самом деле представляет собой набор файлов класса. Каждому файлу .java разрешено иметь не более одного открытого класса, а также любое количество непубличных классов. Поэтому каждый файл имеет артефакт. Если вы хотите организовать эти компоненты (каждая сборка имеет файл .java и несколько файлов .class) для формирования разных групп, вы можете использовать пакет ключевых слов в Java.
2. Функция упаковки
(1) Организовать классы или интерфейсы с аналогичными или связанными функциями в том же пакете, чтобы облегчить поиск и использование классов.
(2) Как и папки, пакеты также используют каталоги в форме дерева для их хранения. Имена классов в одном и том же пакете разные, и имена классов в разных пакетах могут быть одинаковыми. Когда классы с одним и тем же именем класса в двух разных пакетах вызываются одновременно, имя пакета следует добавлять, чтобы их отличить. Поэтому пакет может избежать конфликтов имен.
(3) Пакеты также ограничивают права доступа. Только классы с правами доступа к пакетам могут получить доступ к классам в пакете.
3. Создайте пакет
В Java используйте ключевое слово пакета, чтобы указать пакет (пространство имен), которому принадлежит код.
Синтаксический формат:
Пакет Pkg1 [. PKG2 [. pkg3…]];
Примечание:
(1) Название пакета неявно указывает на структуру каталога кода.
(2) Имя публичного класса (также имя файла Java) в том же каталоге должно быть уникальным.
(3) Объявление пакета должно быть в первой строке исходного файла. Каждый исходный файл может иметь только одно объявление пакета, и к нему применяется каждый тип в этом файле.
(4) Если исходный файл не использует объявление пакета, то классы, функции, перечисления, комментарии и т. Д. В нем будут размещены в неназванном пакете.
(5) Названия пакетов, как правило, в строчных буквах.
Например:
Проверьте исходный код класса java.util.arraylist, и вы можете увидеть, что первая строка файла - это:
Пакет java.util;
Его структура каталогов кода - Java/Util/ArrayList.java
4. Импорт пакет
В Java используйте ключевое слово импорта для импорта пакетов.
Синтаксический формат:
Импорт Package1 [.package2…]. (Classname |*);
пример:
Давайте возьмем java.util.arraylist в качестве примера. Это очень неудобно использовать его таким образом, чтобы иметь полный класс.
java.util.arraylist <string> list = new java.util.arraylist <string> ();
Если вы хотите пропустить предыдущий путь, вы можете использовать ключевое слово импорта.
импортировать java.util.arraylist;
После импорта пакета в файл предыдущий код, который объявляет список, может быть упрощен следующим образом:
Arraylist <string> list = new ArrayList <string> ();
2. Модификаторы прав доступа
1. Пакет: разрешения на доступ к пакетам
Если модификатор доступа не предоставляется, это означает, что это доступ к пакетам.
Доступ по умолчанию не имеет ключевых слов, но обычно он относится к доступу к упаковке (иногда также выражается как дружелюбный, немного похожий на концепцию элементов друга в C ++). Это означает, что все другие классы в пакете могут получить доступ к этому члену или методу, но все классы за пределами этого пакета не могут быть доступны.
пример:
com.notes.packages.test.info
пакет com.notes.packages.test; publicclass info {void print () {system.out.println ("Метод по умолчанию - print ()"); }}com.notes.packages.test.publicdemo01
пакет com.notes.packages.test; publicclass publicdemo01 {publicstaticvoid main (string [] args) {info x = new Info (); x.print (); }}PublicDemo01 и Info может получить доступ к методу информации на уровне по умолчанию - print () в том же пакете.
com.notes.packages.publicdemo02
пакет com.notes.packages; import com.notes.packages.test.info; publicclass publicdemo02 {publicstaticvoid main (string [] args) {info x = new Info (); // x.print (); // Ошибка }}PublicDemo02 и Info не в том же пакете, и нельзя получить доступ к уровню разрешения на доступ к пакетам информации - print ().
2. Public: разрешения на доступ к интерфейсу
Использование общедоступного ключевого слова означает, что объявленный член или метод доступен для всех.
Пример: если разрешение на метод print () в примере разрешения на уровне по умолчанию установлено на публику, доступ к PublicDemo02.
пакет com.notes.packages.test; publicclass info {publicvoid print () {System.out.println ("public Method - print ()"); }}3. Private: невозможно получить доступ
Использование закрытого ключевого слова означает, что объявленный член или метод недоступен для любого другого класса, кроме этого класса.
Сценарий приложения: Синглтонский режим
4. защищен: наследственные разрешения на доступ к доступу
Новый класс (называемый дочерним классом или производным классом) может повторно использовать существующий класс (называемый родительским классом или базовым классом) посредством наследования, а затем расширять участники и методы базового класса. Иногда создатель базового класса хочет, чтобы конкретный участник назначил свой доступ к полученному классу вместо всех классов. Общественность не может этого сделать, и для этой цели защищенная была введена для выполнения этой работы. Protected также предоставляет доступ к пакетам, то есть полученные классы, а другие классы в том же пакете могут получить доступ к защищенным членам или методам.
Пример: после того, как подкласс наследует родительский класс, он может получить доступ к охраняемым членам родительского класса.
класс отец {частная строка a = "private"; Защищенная строка b = "защищен"; публичная строка C = "public";}; Class Son расширяет отец {publicvoid print () {// system.out.println ("element a:" + super.a); // System.out.println ("Элемент b:" + super.b); System.out.println ("Элемент C:" + super.c); }} publicClass protectedDemo01 {publicstaticvoid main (String args []) {son sub = new Son (); sub.print (); }};Примечания по модификаторам доступа
В предыдущих примерах элементы и методы класса могут быть изменены с различными модификаторами разрешения.
Кроме того, есть несколько моментов, на которые обратите внимание на:
(1) Использование модификаторов разрешения для статических членов и статических методов совпадает с обычными членами и методами.
(2) Хотя класс также может быть изменен с помощью модификаторов, два риторических слова разрешения, не могут быть использованы частными и защищенными.
(3) В некоторых книгах доступ к пакетам также называется доступом по умолчанию. Лично я не рекомендую запоминать это, потому что это легко путать с новой функцией Java SE8 - ключевым словом по умолчанию. Это ключевое слово может использоваться только для интерфейса, и его функция заключается в том, чтобы позволить программистам определить реализацию интерфейсов интерфейса по умолчанию (в прошлых версиях JDK не разрешали это, вы можете объявить только методы в интерфейсе).
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.