/*
 * 일반 중첩 클래스
 */

class OuterG{
	
	public static int a;
	private int b;
	
	static { a = 1;}
	
	public OuterG() { b = 2;}
	
	public void outerGinfo() {
		System.out.println("- outerGinfo() -");
		System.out.println("a : " + a );
		System.out.println("b : " + b );
	}
	
	// 중첩 클래스 시작.
	class InnerG {
		
		// public static int c; Error ! static 선언불가. → 외부 클래스 객체가 항상 있어야되기 때문.
		private int d;
		public InnerG() { d= 4; }
		
		public void InnerGinfo() {
			System.out.println("- InnerGinfo() -");
			System.out.println("a : " + a);
			System.out.println("b : " + b);
			System.out.println("d : " + d);
		}
	}
}

// 메인 함수 시작.
public class Ex01General {
	
	public static void main(String[] args) {
		OuterG outer = new OuterG();
		outer.outerGinfo();
		
		System.out.println();
		
		// InnerG inner = new InnerG(); Error! 
		OuterG.InnerG oi = outer.new InnerG();
		oi.InnerGinfo();
	}
}