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
	}
}