サブクラスのコンストラクタ

基本的なことですが忘れていたこともあったのでサブクラスのコンストラクタについて書きます。
サブクラスにてコンストラクタを呼ぶときに何も明示しなければ暗黙的にスーパークラスの引数なしのコンストラクタが呼ばれます。
しかし、スーパークラスに引数なしのコンストラクタがない場合、コンパイルエラーとなるので注意が必要です。

class A {
   A() {  
      ...
   }
}

class B {
   B(String a) {
      ...
   }
}

class C extends A {
   B() {
      // super(); が表記しなくても呼ばれる  
   }
}

class D extends B {
   D() {
      // クラス B には引数なしのコンストラクタがないためコンパイルエラーになってしまう
      // super("test"); のようにするか、クラス B に引数なしのコンストラクタを記述することで解決
   }
}

また、スーパークラスの変更したい値などはfinalやprivateなどが付いていると変更できません。