자바 내부 클래스
자바 내부 클래스
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);
}
}
// Outputs 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);
}
}
외부 클래스에서 private 내부 클래스에 액세스하려고 하면 오류가 발생합니다.
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);
}
}
// Outputs 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());
}
}
// Outputs 10