Vin,
Thanks for your explanations. In the 1st link, Case 4:
If you have methods as follows,
void someMethod( Base obj ); // 1
void someMethod( Level1_A obj ); // 2
void someMethod( Level1_B obj ); // 3
void someMethod( Level2_A obj ); // 4
and you invoke someMethod() with argument null, then you STILL have ambiguity because now the confusion is between invoking the Level1 method or the Level2 method i.e., between 3 & 4.
Since anything passed to Level2_A can be passed to Level1_A, Level2_A is more specific than Level1_A. The Level1_A and Level1_B are at the siblings and hence are considered "equal". Since Level2_A is more specific than Level1_A, Level2_A should be more specific than Level1_A too.
Where is the ambiguity in this case?
All the other cases are very clear to me.
Thanks
Sharda