class X {

    String m( X arg ) { return "X " + arg.getClass(); }

}

class Y extends X {

    String m( Y arg ) { return "Y " + arg.getClass(); }

}

public class OverloadTest {

    public static void main(String[] args) {

	X x = new Y();
	Y y = (Y) x;

	System.out.println( x.m(x));      
	System.out.println( x.m(y));      

	System.out.println( y.m(x));      
	System.out.println( y.m(y));      

	System.out.println( y.m( (X) y)); 
    }
}

