public class Base {
    public Base() {
    foo();
  }
public void foo() {
    System.out.println("Base.foo()");
  }
}
public class Derived extends Base {
public Derived () {}
public void foo() {
    System.out.println("Derived.foo()");
  }
}
And then, when i call those:
public class Running {
public static void main(String[] args) {
    Base b = new Base();
    Derived d = new Derived();
  }
}
It outputs:
*Base.foo()*
*Derived.foo()*
So why, when it gets to derived constructor, it invokes the base constructor but uses the derived's method instead?
PS: If I mark those methods as private, it will print out:
*Base.foo()*
*Base.foo()*
 
     
     
     
    