/*
 * 정적 중첩 클래스
 */

class OuterS{
	public static int a;
	private int b;
	
	static { a = 1;}
	
	public OuterS() { b = 2;}
	
	public void outerGinfo() {
		System.out.println("- outerSinfo() -");
		System.out.println("a : " + a );
		System.out.println("b : " + b );
	}
	
	// 정적 중첩 클래스 시작.
	static class InnerS {
		
		public static int c;
		private int d;
		
		static { c = 3; }
		
		public InnerS() { d = 4; }
		
		public void InnerSinfo() {
			System.out.println("- InnerSinfo() -");
			System.out.println("a : " + a );
			// System.out.println("b : " + b ); Error ! → 외부 클래스에있는 일반 멤버 사용불가.
			// static이 붙어있는 멤버만 사용가능.
			System.out.println("c : " + c );
			System.out.println("d : " + d );
		}
		
	}

}

// 정적 + final 메서드.
class MySystem {
	
	static final class Inner{
		
		public void println(String message) {
			System.out.println(message);
		}
	}
	// out 변수에 Inner 함수 대입. 
	static final Inner out = new Inner();
	
}

// 메인 메서드.
public class Ex02Static {

	public static void main(String[] args) {

		OuterS.InnerS inner = new OuterS.InnerS();
		
		MySystem.out.println("test");
	}
}