НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Мова програмування Java. W3Schools українською. Уроки для початківців

En

Java Внутрішні класи


Java Внутрішні класи

У Java також можливо вкладати класи (клас у класі). Метою вкладених класів є групування класів, які належать один одному, що робить ваш код більш читабельним і придатним для обслуговування.

Щоб отримати доступ до внутрішнього класу, створіть об’єкт зовнішнього класу, а потім – об’єкт внутрішнього класу:

Приклад

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Виведе 15 (5 + 10)
Спробуйте самі »

Приватний внутрішній клас

На відміну від «звичайного» класу, внутрішній клас може бути private (приватним) або protected (захищеним). Якщо ви не хочете, щоб зовнішні об’єкти отримували доступ до внутрішнього класу, оголосите клас як private:

Приклад

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

Якщо ви намагаєтесь отримати доступ до приватного внутрішнього класу із зовнішнього класу, виникає помилка:

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^
Спробуйте самі »

Статичний внутрішній клас

Внутрішній клас також може бути static, що означає, що ви можете отримати доступ до нього без створення об’єкта зовнішнього класу:

Приклад

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Виведе 5
Спробуйте самі »

Примітка: Подібно до атрибутів і методів static, внутрішній клас static не має доступу до членів зовнішнього класу.


Доступ до зовнішнього класу з внутрішнього класу

Однією з переваг внутрішніх класів є те, що вони можуть отримати доступ до атрибутів і методів зовнішнього класу:

Приклад

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Виведе 10
Спробуйте самі »