// an inner class -- class is seen inside, but instances used through interface from outside

interface I {

	public void g();

}

class A {

	int i;

	A(int x) {i=x;}
	class B implements I { 
		public void g() { System.out.println (i); }

	}

	public void incr() { i++; }

	public I createI () {
		return new B(); 

	}

	// void g() { B b = new B();} // will produce error
}

class C { 

 public static void main (String args[]) {

	A a = new A(10);
	A a2 = new A(20);

	I iobj = a.createI ();
	I iobj2 = a.createI ();
	I iobj3 = a2.createI ();

	iobj.g();
	a.incr();
	iobj.g();
	a.incr();
	iobj.g();
	iobj2.g();
	iobj3.g();

 }
}

