1. Общ преглед
В този урок ще разгледаме модификаторите на достъп в Java, които се използват за задаване на ниво на достъп до класове, променливи, методи и конструктори.
Просто казано, има четири модификатора за достъп: публичен , частен , защитен и по подразбиране (без ключова дума).
Преди да започнем, нека да отбележим, че клас от най-високо ниво може да използва само публични или модификатори на достъп по подразбиране . На ниво член можем да използваме и четирите.
2. По подразбиране
Когато не използваме изрично нито една ключова дума, Java ще зададе достъп по подразбиране към даден клас, метод или свойство. Модификаторът по подразбиране за достъп се нарича още private-private , което означава, че всички членове са видими в един и същ пакет, но не са достъпни от други пакети:
package com.baeldung.accessmodifiers; public class SuperPublic { static void defaultMethod() { ... } }
defaultMethod () е достъпен в друг клас от същия пакет:
package com.baeldung.accessmodifiers; public class Public { public Public() { SuperPublic.defaultMethod(); // Available in the same package. } }
Той обаче не е наличен в други пакети.
3. Публично
Ако добавим публичната ключова дума към клас, метод или свойство, тогава я правим достъпна за целия свят , т.е. всички останали класове във всички пакети ще могат да я използват. Това е най-малко ограничителният модификатор на достъп:
package com.baeldung.accessmodifiers; public class SuperPublic { public static void publicMethod() { ... } }
publicMethod () се предлага в друг пакет:
package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherPublic { public AnotherPublic() { SuperPublic.publicMethod(); // Available everywhere. Let's note different package. } }
За повече подробности как се държи публичната ключова дума, когато е приложена към клас, интерфейс, вложен публичен клас или интерфейс и метод, вижте специалната статия.
4. Частен
Всеки метод, свойство или конструктор с ключовата дума private е достъпен само от същия клас . Това е най-ограничителният модификатор за достъп и е ядро на концепцията за капсулиране. Всички данни ще бъдат скрити от външния свят:
package com.baeldung.accessmodifiers; public class SuperPublic { static private void privateMethod() { ... } private void anotherPrivateMethod() { privateMethod(); // available in the same class only. } }
Тази по-подробна статия ще покаже как се държи ключовата дума private, когато се прилага към поле, конструктор, метод и към вътрешен клас.
5. Защитена
Между публичния и частния нива на достъп има модификатор на защитения достъп.
Ако декларираме метод, свойство или конструктор със защитената ключова дума, можем да получим достъп до члена от същия пакет (както при нивото на частен достъп на пакета ) и в допълнение от всички подкласове на неговия клас , дори ако те се намират в други пакети:
package com.baeldung.accessmodifiers; public class SuperPublic { static protected void protectedMethod() { ... } }
protectedMethod () се предлага в подкласове (независимо от пакета):
package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherSubClass extends SuperPublic { public AnotherSubClass() { SuperPublic.protectedMethod(); // Available in subclass. Let's note different package. } }
Специалната статия описва повече за ключовата дума, когато се използва в поле, метод, конструктор, вътрешен клас и достъпността в същия пакет или различен пакет.
6. Сравнение
Таблицата по-долу обобщава наличните модификатори за достъп. Виждаме, че клас, независимо от използваните модификатори на достъп, винаги има достъп до своите членове:
Модификатор | Клас | Пакет | Подклас | Свят |
---|---|---|---|---|
публично |
Y. | Y. | Y. | Y. |
защитен |
Y. | Y. | Y. | н |
по подразбиране |
Y. | Y. | н | н |
частни |
Y. | н | н | н |
7. Заключение
В тази кратка статия разгледахме модификаторите за достъп в Java.
Добра практика е да се използва възможно най-ограничителното ниво на достъп за всеки член, за да се предотврати злоупотреба. Винаги трябва да използваме модификатора за частен достъп, освен ако няма основателна причина да не го направим.
Нивото на публичен достъп трябва да се използва само ако член е част от API.
Както винаги, примерите за кодове са достъпни в Github.