デフォルトコンストラクタ

CodeZineの「突然ですがクイズです!」っていう記事を見てて、己の不勉強さを心より恥じる。


以下のコードを実行した際に、デフォルトコンストラクタの挙動を勘違いしていたのさ。

package test;

public class Project1 {
    public static void main(String[] args) {
        new TChild();
    }
}

class TParent {
    public TParent() {
        this.foo();
    }

    protected void foo() {
        System.out.println("TParent#foo");
    }
}

class TChild extends TParent {
    public TChild() {
    }
    
    protected void foo() {
        super.foo();
        System.out.println("TChild#foo");
    }
}

てっきり、「TChildクラスでデフォルトコンストラクタオーバーライドしちゃったら、何も表示されないジャン」とか思ってたんス。


でも、デフォルトコンストラクタは、ちゃんとTParentクラスを呼び出すのね。
まぁ、そう言われればそうだな。


オーバーライドしてつぶしちゃうのは、引数ありの場合ですね。ハイ。