В Java допускается вкладывать описание одних классов внутрь других. При этом внутренние классы имеют доступ ко всем членам внешнего класса, в который они вложены. Напротив, внешний класс не имеет доступа к членам внутреннего класса.
class OuterClass{ private int OuterValue; private void OuterMethod(){ JOptionPane.showMessageDialog(null, "Вызван метод класса OuterClass"); }
//объявляем внутренний класс class InnerClass{ private int InnerValue; public void InnerMethod(){ JOptionPane.showMessageDialog(null, "Вызван метод класса InnerClass"); //из внутреннего класса есть доступ к членам внешнего класса OuterValue = 10; OuterMethod(); } } //объект внутреннего класса InnerClass InnerClassRef;
//конструктор внешнего класса public OuterClass() { //создаем объект внутреннего класса InnerClassRef = new InnerClass(); }
}
//************************* OuterClass oc = new OuterClass(); oc.InnerClassRef.InnerMethod();
Вложенный класс может быть статическим, в этом случае он может вызывать только статические методы внешнего класса и использовать статические переменные внешнего класса, в который он вложен.
class OuterClass{ static private int OuterValue; //объявлен как статический static private void OuterMethod(){ //объявлен как статический JOptionPane.showMessageDialog(null, "Вызван метод класса OuterClass"); } //объявляем внутренний класс static class InnerClass{ private int InnerValue; public void InnerMethod(){ JOptionPane.showMessageDialog(null, "Вызван метод класса InnerClass"); //из внутреннего класса есть доступ к членам внешнего класса OuterValue = 10; //используем статическую переменную внешнего класса OuterMethod(); //используем статический метод внешнего класса } } //объект внутреннего класса InnerClass InnerClassRef; //конструктор внешнего класса public OuterClass() { //создаем объект внутреннего класса InnerClassRef = new InnerClass(); } }
|