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
Спробуйте самі »