JAVA/상속
Test127 중첩 클래스(내부 클래스) - static 중첩 클래스(중첩 내부 클래스)
ready J
2020. 9. 10. 22:29
1. static 중첩 클래스(중첩 내부 클래스)
클래스 내부에... 『public static class 클래스명』
내부 클래스를 감싸는 외부 클래스의 {} 안에 static을 붙인 새로운 클래스를 설계하는 것으로 모든 접근제어지시자를 사용할 수 있다. static 중첩 클래스가 포함하고 있는 메소드에서는 외부 클래스의 인스턴스 변수나 인스턴스 메소드에는 접근할 수 없고, 클래스 변수와 클래스 메소드만 접근할 수 있다.
- 프로그램의 구조를 보다 더 간단하고 알아보기 쉽게 구성할 수 있다.
- static 으로 선언된 내부 클래스이다.
- 중첩 클래스의 객체는 중첩 클래스를 포함하고 있는 외부 클래스의 객체와 동등하다.
- 외부 클래스의 클래스 변수와 클래스 메소드는 바로 접근하여 사용하는 것이 가능하다.
- 중첩 클래스와 중첩 클래스를 포함하고 있는 외부 클래스의 객체를 생성하여 서로 접근하는 것이 가능하다.
- 중첩 클래스를 외부에서 단독으로 사용하는 것이 가능하다.
static 중첩 클래스(중첩 내부 클래스)의 예시
class Test
{
static int a = 10; // static
int b = 20;
public static class StaticNested // static
{
int c = 30;
void write()
{
System.out.println("write()...");
System.out.println("a : " + a);
//System.out.println("b : " + b); //-- 에러 발생
System.out.println("c : " + c);
}
}
void print()
{
StaticNested sn = new StaticNested();
sn.write();
}
}
public class Test127
{
public static void main(String[] args)
{
Test ob1 = new Test();
ob1.print();
//--==>>write()...
// a : 10
// c : 30
StaticNested ob2 = new StaticNested();
//--==>> 에러 발생
// ※ 중첩 내부 클래스는 외부에서 단독으로 객체를 생성한다.
// 단, 위와 같은 방법으로 객체를 생성해서는 안되고
// 클래스 메소드를 호출하는 것과 같은 방식을 통해
// 접근하여 인스턴스를 생성할 수 있도록 처리해야 한다.
//Test.a
Test.StaticNested ob2 = new Test.StaticNested();
ob2.write();
//--==>> write()...
// a : 10
// b : 30
}
}