Constructors are not inherited.
If you know you are constructing a Rectangle, then you use it's constructor. If you create a Square, you use that constructor.
But they are not inherited, and can have completely different semantics - accept different arguments or throw for for new reasons.
That having said, the Rectangle / Square example doesn't really work: Is `new Rectangle(42, 42)` a Square? (This brings us to factory methods...)