- ベストアンサー
Javaコンストラクタthisとsuperについて
- javaのthisとsuperについての理解
- super()の呼び出しタイミングについての疑問
- Objectクラスのコンストラクタの呼び出し方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
他のコンストラクタを呼び出す目的では this も super もコンストラクタの最初の文にする必要があります。両方を同時に書くことはできません。 この場合は Object のコンストラクタを明示的に呼び出すならば int 引数付きのコンストラクタの冒頭で以下のように行えます。Q2 はこの呼び出しの部分でフックできるはずです。暗黙の呼び出しをフックできるかというのは……はてどうだったかなぁ。 public ConstThisTest(int constValue) { super() // ここで明示的に呼ぶ this.constValue = constValue; } > Q1:super()はいつ呼ばれているのでしょうか? ConstThisTest() ↓ ConstThisTest(int constValue) ↓ (暗黙的な)super() という順で呼ばれています。
その他の回答 (1)
>確かsuper()はコンパイラが自動的にコンストラクタが実行された時1行目に挿入している。 >コンストラクタ内の最初のステートメントであることが必要とエラーが出る。 この2つが示すことは、「superとthisは共存できない」ということです。superはコンストラクタの1行目に暗黙の内に挿入されますが、thisがある場合はこの限りではありません。 thisは、クラス内のコンストラクタを呼び出します。注意したいのは、その呼び出されるコンストラクタ内でも暗黙の内にsuperは呼び出されている、という点です。すなわち、もしthisの前に暗黙裡にsuperが挿入されたなら、コンストラクタが二重に呼び出される(そのコンストラクタ内と、thisで呼び出されたコンストラクタ内)ことになり、インスタンス生成時の初期化が二重に実行されることになります。 従って、thisでクラス内のコンストラクタを呼び出す場合はsuperはつけませんし暗黙裡に挿入もされません。