class A {}
class B extends A {}

class X{
	void foo(A x, A y) {System.out.println("AA");}
	void foo(B x, B y) {System.out.println("BB");}
}

class Overloading
{
	public static void main(String[] args)
	{
		A a = new B();
		B b = new B();
		X x = new X();

		x.foo(a, a);
		x.foo(a, b);
		x.foo(b, a);
		x.foo(b, b);
	}
}