// multiple interfaces 
// use them as different windows to same class

interface I1 { public void f1(); void f2(); }
interface I2 extends I1 { public void f3(); }
interface I3 { public void f4(); void f5(); }
interface I4 extends I3 { public void f6(); }

class C implements I2, I4 {
	private int state;

	C() {state=0;}

	public void f1() {state++; System.out.println("f1 :" + state);}
	public void f2() {state++; System.out.println("f2 :" + state);}
	public void f3() {state++; System.out.println("f3 :" + state);}
	public void f4() {state++; System.out.println("f4 :" + state);}
	public void f5() {state++; System.out.println("f5 :" + state);}
	public void f6() {state++; System.out.println("f6 :" + state);}

}

class A1 {
	private I1 obj;
	A1 (I1 anobj) {obj=anobj;}
	public void func () {obj.f1(); obj.f2();}
}
class A2 {
	private I2 obj;
	A2 (I2 anobj) {obj=anobj;}
	public void func () {obj.f1(); obj.f2(); obj.f3();}
}


class MultipleInterfaces {
	public static void main (String args[]) {
		C c = new C();
		A1 a1 = new A1(c);
		A2 a2 = new A2(c);
		a1.func();
		a2.func();
		a1.func();
	}
}

