[ Top ] > [ Communication ] > [ study ] > [ Java ]
>super-2-
a
 
 

super-2-

私が参考にしているJava入門書には、継承するとスーパークラスのコンストラクタに限っては継承されない。とある。つまり、スーパークラスから、サブクラスへ継承を行っても初期化をおこなうコンストラクタは継承されないというのだ。
親のコンストラクタも実行させたい場合は、そのサブクラスで super というキーワードで行う。らしい。

ところが、実験したのだが全然そんなことなかった。 super を使わなくてもちゃんと親のコンストラクタが実行されてから子のコンストラクタが実行される。
意味がわからない。Javaのバージョンアップで仕様が変わったのだろうか。
以下、実験。

> superClass.java
class super1{
  //コンストラクタ
  super1(){
    System.out.println("ここはsuper1のコンストラクタ");
  }
}
> sub1.java
class sub1{
  //コンストラクタ

  sub1(){

    System.out.prinln("ここはsub1のコンストラクタ");

  }

}
> test1.java
class test1{
  public static void main(String args[ ]){
    //インスタンス化
    sub1 s = new sub1();
  }
}
  

実行

>java test1
ここはsuper1のコンストラクタ
ここはsub1のコンストラクタ
>

私の参考にした書籍だと 「ここはsuper1のコンストラクタ」 は、表示されてはいけないはずだが・・・。

では、super を使う場合の例は、仮に superClass.java が以下の内容だとして

> superClass.java
class super1{
  //コンストラクタ
  super1(Strin s){
    System.out.println("ここはsuper1のコンストラクタ");
  }
}

だとすると、コンパイルは出来るものの実行するときにエラーがでます。
つまり、スーパークラスのコンストラクタに引数が必要なのに、 渡していないからですが、この場合

 

> sub1.java
class sub1{
  //コンストラクタ
  sub1(){
    super("aaa");
    System.out.prinln("ここはsub1のコンストラクタ");
  }
}

これで、エラーがでなくなります。