Klasy wewnętrzne Java
Klasy wewnętrzne Java
W Javie możliwe jest również zagnieżdżanie klas (klasa w klasie). Celem klas zagnieżdżonych jest grupowanie klas, które należą do siebie, dzięki czemu kod jest bardziej czytelny i łatwiejszy w utrzymaniu.
Aby uzyskać dostęp do klasy wewnętrznej, utwórz obiekt klasy zewnętrznej, a następnie utwórz obiekt klasy wewnętrznej:
Przykład
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);
}
}
// Outputs 15 (5 + 10)
Prywatna klasa wewnętrzna
W przeciwieństwie do „zwykłej” klasy, klasą wewnętrzną może być private
lub protected
. Jeśli nie chcesz, aby zewnętrzne obiekty miały dostęp do klasy wewnętrznej, zadeklaruj klasę jako private
:
Przykład
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);
}
}
Jeśli spróbujesz uzyskać dostęp do prywatnej klasy wewnętrznej z klasy zewnętrznej, wystąpi błąd:
Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
Statyczna klasa wewnętrzna
Klasą wewnętrzną może być również static
, co oznacza, że można uzyskać do niej dostęp bez tworzenia obiektu klasy zewnętrznej:
Przykład
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);
}
}
// Outputs 5
Uwaga: podobnie jak static
atrybuty i metody, static
klasa wewnętrzna nie ma dostępu do członków klasy zewnętrznej.
Uzyskaj dostęp do klasy zewnętrznej z klasy wewnętrznej
Jedną z zalet klas wewnętrznych jest to, że mają dostęp do atrybutów i metod klasy zewnętrznej:
Przykład
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());
}
}
// Outputs 10