All the three versions of method m() can accept null value. Now when more than one methods are candidate for calling, the compiler looks for the most specific parameter type for the passed value to determine which method to call.
But in this example, compiler found that the method m() with both
String and GFC200 are most specific because they both are extending Object, so compiler cannot determine which one to call results an ambiguous method call error.
Hope this helps.