From my understanding all function-calls in Java are virtual, and numeral literals have the type int. But why does the Output in the example below differ?
public class A {
    public int f(long d) {
        return 2;
    }
}
public class B extends A {
    public int f(int d) {
        return 1;
    }
}
public class M {
    public static void main(String[] args) {
        B b = new B();
        A ab = b;
        System.out.println(b.f(1));
        System.out.println(ab.f(1));
    }
}
 
     
    