I checked the
Java Language Spec in relation to instance creation (refer to section 12.5). To quote:
Unlike C++, the Java programming language does not specify altered rules for method dispatch during the creation of a new class instance. If methods are invoked that are overridden in subclasses in the object being initialized, then these overriding methods are used, even before the new object is completely initialized.
It then gives an example similar to yours showing that even though you are in a constructor, there is an implied "this" which is an instance of class "Y", so that classes method is invoked.
It was a decision made early on and it works that way because the creators of Java explicitly specified it to be so.