super2

クラスの基本のところでデフォルトコンストラクタ、または引数をとらないコンストラクタ
が自動的に呼び出されることは説明しました。

しかし、コンストラクタを明示的に呼び出すことができます。

キーワード superを使用して呼び出します。

コンストラクタを呼び出すときのルール

コンストラクタをsuperで呼び出すときはコンストラクタ内の先頭に記述 しなければいけません。

サンプルプログラム(Sample55.java)

class Sample55{
    public static void main(String args[]){
   Sub55 obj1 = new Sub55();
   Sub55 obj2 = new Sub55(10);

    }

}
class Super55{

   //Super55の引数をとらないコンストラクタの処理は空にします。
     Super55(){}
   Super55(int i){
        System.out.println("これは、引数のあるスーパークラスのコンストラクタです");
        System.out.println("int i =" + i);
  }
}
class Sub55 extends Super55{
    Sub55(){
      System.out.println("これは、引数のないサブクラスのコンストラクタです");
  }

   Sub55(int j){
      System.out.println("これは、引数のあるサブクラスのコンストラクタです");
      System.out.println("int j =" + j);

  }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

【必須ソフト14種類がパック!】自宅でプロのWebデザイナーを目指す! デジハリ・オンラインスクール
スクール・通信講座の徹底比較!一括資料請求【無料】
技術系の通信教育講座ならJTEX

コンパイル・実行します。

今回はsuperをわかりやすくするためにあえて、スーパークラスの引数のないコンストラクタ
は何も処理をさせていません。

では、次のプログラムでsuperを定義したいと思います。

サンプルプログラム(Sample55_1.java)

class Sample55_1{
    public static void main(String args[]){
   Sub55_1 obj1 = new Sub55_1();
   Sub55_1 obj2 = new Sub55_1(10);
 
    }

}
class Super55_1{

   //Super55_1の引数をとらないコンストラクタの処理は空にします。
      Super55_1(){}
   Super55_1(int i){
        System.out.println("これは、引数のあるスーパークラスのコンストラクタです");
        System.out.println("int i =" + i);
  }
}
class Sub55_1 extends Super55_1{
    Sub55_1(){
      System.out.println("これは、引数のないサブクラスのコンストラクタです");
  }

   Sub55_1(int j){
      super(20);

      System.out.println("これは、引数のあるサブクラスのコンストラクタです");
      System.out.println("int j =" + j);
    }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

このようにsuper(20)とするだけで、スーパークラスの引数があるコンストラクタを呼び出します。
また、引数のないコンストラクタを呼び出したいときはsuper();とするだけです。

最初に説明したとおりsuperの呼び出しはコンストラクタの先頭でなければいけません。
したがって次のような記述の仕方はコンパイルエラーになります。

サンプルプログラム(Sample55_2.java)

class Sample55_2{
    public static void main(String args[]){
   Sub55_2 obj1 = new Sub55_2();
   Sub55_2 obj2 = new Sub55_2(10);

    }

}
class Super55_2{

   //Super55_2の引数をとらないコンストラクタの処理は空にします。
      Super55_2(){}
   Super55_2(int i){
        System.out.println("これは、引数のあるスーパークラスのコンストラクタです");
        System.out.println("int i =" + i);
  }
}

class Sub55_2 extends Super55_2{
    Sub55_2(){
      System.out.println("これは、引数のないサブクラスのコンストラクタです");
  }

   Sub55_2(int j){
  
      System.out.println("これは、引数のあるサブクラスのコンストラクタです");
      System.out.println("int j =" + j);

     super(20);

     }
}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

エラー内容を見ればすぐ理解できると思います。
このようなエラーが出力されます。

ページのトップへ戻る