• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaコンストラクタthisとsuperについて)

Javaコンストラクタthisとsuperについて

このQ&Aのポイント
  • javaのthisとsuperについての理解
  • super()の呼び出しタイミングについての疑問
  • Objectクラスのコンストラクタの呼び出し方法

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

他のコンストラクタを呼び出す目的では this も super もコンストラクタの最初の文にする必要があります。両方を同時に書くことはできません。 この場合は Object のコンストラクタを明示的に呼び出すならば int 引数付きのコンストラクタの冒頭で以下のように行えます。Q2 はこの呼び出しの部分でフックできるはずです。暗黙の呼び出しをフックできるかというのは……はてどうだったかなぁ。 public ConstThisTest(int constValue) { super() // ここで明示的に呼ぶ this.constValue = constValue; } > Q1:super()はいつ呼ばれているのでしょうか? ConstThisTest()  ↓ ConstThisTest(int constValue)  ↓ (暗黙的な)super() という順で呼ばれています。

その他の回答 (1)

noname#247307
noname#247307
回答No.1

>確かsuper()はコンパイラが自動的にコンストラクタが実行された時1行目に挿入している。 >コンストラクタ内の最初のステートメントであることが必要とエラーが出る。 この2つが示すことは、「superとthisは共存できない」ということです。superはコンストラクタの1行目に暗黙の内に挿入されますが、thisがある場合はこの限りではありません。 thisは、クラス内のコンストラクタを呼び出します。注意したいのは、その呼び出されるコンストラクタ内でも暗黙の内にsuperは呼び出されている、という点です。すなわち、もしthisの前に暗黙裡にsuperが挿入されたなら、コンストラクタが二重に呼び出される(そのコンストラクタ内と、thisで呼び出されたコンストラクタ内)ことになり、インスタンス生成時の初期化が二重に実行されることになります。 従って、thisでクラス内のコンストラクタを呼び出す場合はsuperはつけませんし暗黙裡に挿入もされません。

関連するQ&A