Java言語仕様§12.5「クラスインスタンスの作成」には以下のように記されている。 C++ とは異なり、プログラム言語 Java では新規クラスインスタンス生成中のメソッドディスパッチに対する代替規則を規定していない。オブジェクトの初期化中に、サブクラスでオーバーライドしたメソッドを起動すると、新たなオブジェクトの初期化が完了する前であっても、オーバーライドしたメソッドのほうが起動される。 オーバーライド可能なメソッドをオブジェクトの構築時に呼び出すと、初期化の完了していないデータが使用され、実行時例外や予期せぬ結果を招く恐れがある。また、オブジェクトの構築が完了する前にthis参照が外部に晒され、初期化完了前のデータあるいは矛盾したデータを、他のスレッドに晒す危険性がある。詳しくは「TSM01-J. オブジェクトの構築時にthis参照を逸出させない」を参照。結論としては、コンストラクタ