I'm calling ChildTest class methods with ChildTest reference only i.e.
ChildTest child = new ChildTest(); // not dynamic dispatching. 
My question is why child.foo() output is Test foo called 10
class Test {
    int x = 10;
    public void foo() {
        System.out.println("Test foo called " + x);
    }
    public static void main(String args[]) {
        ChildTest child = new ChildTest();
        System.out.println(child.x);
        child.foo();
        child.bar();
    }
}
class ChildTest extends Test {
    int x = 20;
    public void bar() {
        System.out.println("ChildTest Bar called " + x);
    }
}
 
     
     
     
     
     
    