Hi Mukund
Well I guess that this question is from Dan and who better than Dan to answer it. But I will give it a try.
What's actually is happening is you have an object of type A which is the superest(my
word)

simply the supermost class(except ofcourse Object). So when you pass in a variable of type A the compiler calls a method from class C which takes in a object of A. The class C has A's m1()method inherited(but not overriden because of different parameter types) so it calls it.
To put it simply it is a inherited method of class C that is being invoked and hence the output.
Clear now?

[ May 21, 2003: Message edited by: Anupam Sinha ]