I have this code :
class A{}
class B extends A{}
class C extends B{}
class D{
public void m(B b){
System.out.println("A");
}
public void m(Object o){
System.out.println("B");
}
public void m(String s){
System.out.println("C");
}
public static void main(String args[]){
D x = new D();
x.m(null);
}
}
I know this gives a compilation error. Compiler is confused among the results "A" and "C". Why null is extending from class B and String ?