The below program prints ParentClass a() -
public class StaticBindingTest {
    public static void main(String[] args) {
        ParentClass p = new ChildClass();
        p.a("abc");
    }       
}
class ParentClass{
    public void a(Object o){
        System.out.println("ParentClass a()");  
    }
}
class ChildClass extends ParentClass{
    public void a(String s){
        System.out.println("ChildClass a()");   
    }
}
However, if I change ParentClass a() to accept String, the program prints Childclass a(). Why? -
package com.my.test;
public class StaticBindingTest {
    public static void main(String[] args) {
        ParentClass p = new ChildClass();
        p.a("abc");
    }       
}
class ParentClass{
    public void a(String o){
        System.out.println("ParentClass a()");  
    }
}
class ChildClass extends ParentClass{
    public void a(String s){
        System.out.println("ChildClass a()");   
    }
}
 
     
    
