初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
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
コンパイル・実行してみます。
エラー内容を見ればすぐ理解できると思います。
このようなエラーが出力されます。