Java модификаторы доступа: полное руководство
Java модификаторы доступа это ключевые слова, которые используются для определения уровня доступа к классу, методу или переменной внутри класса. В Java, производится четыре типа модификаторов доступа:
1. `public`: доступны из любого места в программе, включая другие пакеты.
2. `protected`: доступны в текущем классе, пакете и любом наследуемом классе.
3. `default` (не указан): доступны только в текущем пакете.
4. `private`: доступны только в текущем классе.
Например, если мы имеем класс `Person`, который имеет приватное поле `age`, то только методы внутри этого класса могут получить доступ к полю `age`. Если мы используем модификатор доступа `public` на поле `age`, его можно использовать из любого места в программе.
Пример:
public class Person {
private int age;
public String name;
protected String address;
String gender; // default access modifier
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class Employee extends Person {
public void work() {
System.out.println(name + " is working.");
System.out.println(address + " is the address of " + name);
// can't access age directly, must use getAge() method
System.out.println(name + "'s age is " + getAge());
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setAge(25);
person.name = "John";
person.address = "123 Main St.";
person.gender = "male";
System.out.println(person.name + " is " + person.getAge() + " years old.");
Employee employee = new Employee();
employee.name = "Jane";
employee.address = "456 Elm St.";
employee.gender = "female";
employee.setAge(30);
employee.work();
}
}
В этом примере класс `Person` определен с разными модификаторами доступа для полей `age`, `name`, `address` и `gender`. Класс `Employee` наследует класс `Person`, и имеет доступ к защищенному и публичному полям. В методе `work()` мы можем использовать доступные поля, но не можем напрямую использовать приватное поле `age`, поэтому мы используем метод `getAge()`. В методе `main()` мы создаем экземпляры `Person` и `Employee` и используем их методы и поля различных уровней доступа.