現在独学でjavaを学んでいます。
以下のコードにつきまして、解説をお願い出ますでしょうか。
public class StartClass { public static void main(String[]args) { FirstClass first = new FirstClass(); SecondClass second = new SecondClass(2); ThirdClass third = new ThirdClass(5); } } class FirstClass { FirstClass () { System.out.println("FirstClassです。"); } } class SecondClass extends FirstClass{ SecondClass (int x) { this(); System.out.println("引数" + x + "のSecondClassです。"); } SecondClass () { System.out.println("SecondClassです。"); } } class ThirdClass extends SecondClass() { ThirdClass () { System.out.println("ThirdClassです。"); } ThirdClass(int x) { super(x); System.out.println("引数" + x + "のThirdClassです。"); } }
解答では、「クラスのインスタンスが生成されると、そのクラスのスーパークラスのコンストラクタが呼び出される(super();が暗黙的にコンストラクタの先頭に挿入される)」と記載されていたのですが、「super();」が暗黙的に挿入されるのは、インスタンス化されたクラスのコンストラクタ内で明示的にコンストラクタの呼び出しがない場合のみと認識していたのですが、出力結果としては
FirstClassです。
FirstClassです。
SecondClassです。
引数2のSecondClassです。
FirstClassです。
SecondClassです。
引数5のSecondClassです。
引数5のThirdClassです。
と記述されていました。
自身の解釈としては、「super();」が暗黙的に挿入されるのは、インスタンス化されたクラスのコンストラクタ内で明示的にコンストラクタの呼び出しがない場合のみと認識していたため、
SecondClass second = new SecondClass(2);
のインスタンス生成の際、SecondClass内のコンストラクタ「SecondClass (int x)」で「this();」の明示的な呼び出しがあるので、FirstClass内のコンストラクタ「FirstClass ()」は呼び出しがかからないと考えたのですが、異なるようでした。
上記につきましてどのように処理されているのか解説していただけないでしょうか。
初歩的な質問で申し訳ございませんが、よろしくお願いいたします。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/23 04:01