English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массивы

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Списки (List)

Java Queue (очередь)

Java Map-сборники

Java Set-сборники

Java Ввод/вывод (I/O)

Java Reader/Writer

Другие темы Java

Доступ к частным членам класса в Java

Java полный список примеров

В этом примере мы изучим доступ к частным методам и свойствам класса в Java.

Чтобы понять этот пример, вы должны знать следующееJava-программированиеТема:

Пример 1: использование методов getter и setter для доступа к私有ным свойствам

class Test {
  //приватная переменная
  private int age;
  private String name;
  // инициализация age
  public void setAge(int age) {
    this.age = age;
  }
  // инициализация name
  public void setName(String name) {
    this.name = name;
  }
  // доступ к age
  public int getAge() {
    return this.age;
  }
  //доступ к name
  public String getName() {
    return this.name;
  }
}
class Main {
  public static void main(String[] args) {
    //создать объект Test
    Test test = new Test();
    //установить значение приватной переменной
    test.setAge(24);
    test.setName("w3codebox");
    //получить значение приватной переменной
    System.out.println("Age: " + test.getAge());
    System.out.println("Name: " + test.getName());
  }
}

Результат вывода

Возраст: 24
Имя: w3codebox

В предыдущем примере у нас есть приватные переменные с именами age и name. Здесь мы пытаемся получить доступ к приватным переменным из другого класса с именем Main.

Мы уже использовали методы getter и setter для доступа к приватным переменным. Здесь,

  • методы setter - setAge() и setName() инициализируют приватные переменные

  • методы getter - getAge() и getName() возвращают значения приватных переменных

Пример 2: доступ к приватным полям и методам с помощью рефлексии

import java.lang.reflect.*;
class Test {
  //приватная переменная
  private String name;
  //приватный метод
  private void display() {
    System.out.println("The name is " + name);
  }
}
class Main {
  public static void main(String[] args) {
    try {
      //создать объект Test
      Test test = new Test();
      //создать объект с именем obj
      Class obj = test.getClass();
      //доступ к приватной переменной
      Field field = obj.getDeclaredField("name");
      //сделать приватное поле доступным
      field.setAccessible(true);
      //установить значение поля
      field.set(test, "w3codebox");
      //получить значение поля
      //и преобразовать его в строку
      String value = (String)field.get(test);
      System.out.println("Name: " + value);
      //доступ к приватному методу
      Method[] methods = obj.getDeclaredMethods();
      System.out.println("Имя метода: " + methods[0].getName());
      int modifier = methods[0].getModifiers();
      System.out.println("Доступ к модификаторам: " + Modifier.toString(modifier));
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
}

Результат вывода

Имя: w3codebox
Имя метода: display    
Доступ к модификаторам: private

В этом примере у нас есть частное поле name и частный метод display(). Здесь мы используем reflection для доступа к частным полям и методам класса Test.

Чтобы узнать о reflection, пожалуйста, посетитеJava Reflection (отражение)

Java полный список примеров