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 ?
 
    