Javaでは、非finalクラスのコンストラクタは、抽象メソッドでも非finalでも、すべてのインスタンスメソッドを呼び出すことができます。Javaは、コンストラクタが抽象メソッドと非最終メソッドを呼び出すことを許可するのはなぜですか?
これは悪い習慣(例えば、Effective Java 2nd Edition、Item 17を参照)として認識され、定義されたコンストラクタの順序のためにC++では不可能です。
なぜ私はこのことがJava言語の設計から始めることが許されたのですか?言語の制限として禁じられているように思えました。これを行う必要がある場合はありますか?
コンパイルが難しくなります。 [それをしないでください](http://stackoverflow.com/questions/15327417/is-it-ok-to-call-abstract-method-from-constructor-in-java) –
どのようにコンパイルするのですかより困難?言語が "コンストラクタがprivateまたはfinalインスタンスメソッドを呼び出すことができる"のような制限がある場合、コンパイル時に検証するのは簡単なようです。 私はこれを広範に行うレガシーコードをたくさん探しているので、これがなぜ始まったのか不思議です。 – Uri
これは 'this'を漏らすのと同じ理由で悪い習慣です – oldrinb