В Java модификаторите за достъп са основни инструменти, които определят как членовете на клас като методи на променливи и дори самият клас могат да бъдат достъпни от други части на нашата програма.
В Java има 4 типа модификатори за достъп:
Модификатори на достъп в JavaМодификатор за частен достъп
Модификаторът за частен достъп се определя с помощта на ключовата дума private. Методите или членовете на данните, декларирани като частни, са достъпни само в рамките на класа, в който са декларирани.
Java
class Person { // private variable private String name; public void setName(String name) { this.name = name; // accessible within class } public String getName() { return name; } } public class Geeks { public static void main(String[] args) { Person p = new Person(); p.setName('Alice'); // System.out.println(p.name); // Error: 'name' // has private access System.out.println(p.getName()); } }
Изход
Alice
Обяснение: Директният достъп до името не е разрешен извън Лице, налагащо капсулиране.
Модификатор за достъп по подразбиране
Когато не е посочен модификатор за достъп за метод на клас или член на данни, се казва, че има модификатора за достъп по подразбиране по подразбиране. Това означава, че само класове в рамките на същия пакет имат достъп до него.
Javaclass Car { String model; // default access } public class Main { public static void main(String[] args){ Car c = new Car(); c.model = 'Tesla'; // accessible within the same package System.out.println(c.model); } }
Изход
Tesla
Обяснение: Членовете с достъп по подразбиране не могат да бъдат достъпни от класове в различен пакет.
Geeks.java: Клас по подразбиране в рамките на същия пакет
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Клас по подразбиране от различен пакет (за контраст)
C++// package with default modifier package p2; import p1.*; // importing package p1 // This class is having // default access modifier class GeekNew { public static void main(String args[]) { // Accessing class Geek from package p1 Geek o = new Geek(); o.display(); } }
Обяснение: В този пример програмата ще покаже грешката по време на компилиране, когато се опитаме да получим достъп до клас модификатор по подразбиране от различен пакет.
Модификатор на защитен достъп
Модификаторът за защитен достъп се указва с помощта на ключовата дума protected. Методите или членовете на данните, декларирани като защитени, са достъпни в рамките на един и същи пакет или подкласове в различни пакети.
Javaclass Vehicle { protected int speed; // protected member } class Bike extends Vehicle { void setSpeed(int s) { speed = s; // accessible in subclass } int getSpeed() { return speed; // accessible in subclass } } public class Main { public static void main(String[] args){ Bike b = new Bike(); b.setSpeed(100); System.out.println('Access via subclass method: ' + b.getSpeed()); Vehicle v = new Vehicle(); System.out.println(v.speed); } }
Изход
Access via subclass method: 100 0
Обяснение: скоростта е достъпна чрез методи на подклас и други класове в същия пакет, но директният достъп от различен пакет (не-подклас) би се провалил.
Модификатор на публичен достъп
Модификаторът за публичен достъп се посочва с помощта на ключовата дума public. Публичните членове са достъпни от всяка точка на програмата. Няма ограничение за обхвата на членовете с публични данни.
Javaclass MathUtils { public static int add(int a int b) { return a + b; } } public class Main { public static void main(String[] args) { System.out.println(MathUtils.add(5 10)); // accessible anywhere } }
Изход
15
Обяснение: add() е глобално достъпен благодарение на публичния модификатор.
Класовете или интерфейсите от най-високо ниво не могат да бъдат декларирани като частни, защото частни означава „видими само в рамките на обграждащия клас“.
Сравнителна таблица на модификаторите за достъп в Java
Access-ModifierКога да използвате всеки модификатор на достъп в проекти от реалния свят
- Частно: Идеята трябва да се използва възможно най-рестриктивен достъп, така че частният трябва да се използва колкото е възможно повече.
- По подразбиране (Package-Private): Често се използва в помощни програми с обхват на пакет или помощни класове.
- Защитено: Често се използва в дизайни, базирани на наследяване, като разширения на рамка.
- Обществен : Това се използва за класове на обслужване на крайни точки на API или помощни методи, споделени между различни части на приложение.