superキーワードの説明ページです。
superはフィールドやメソッドに付加することができる、スーパークラスのインスタンス(オブジェクト)を指し示すキーワードです。
もくじ
superの概要
superは前述の通り、スーパークラスのインスタンス(オブジェクト)を指し示すものです。継承されたクラスのメソッドやフィールドはsuperが省略された形になっています。
また、this同様superもコンストラクタ内で利用することができます。
様々なsuperの記述と利用法
superをフィールドと利用する
スーパークラスとサブクラスでは同じフィールド名を定義することができ、サブクラス内でスーパークラスのフィールドを利用する場合はsuperを付加することで利用できます。
※基本的にフィールドはprivate宣言されており、スーパークラスのフィールドを直接利用できません。その為、フィールドにsuperを付けることはあまりありません。
フィールドにsuperを追加 | super.フィールド名 |
---|---|
記述例 | super.name = name ; |
superをメソッドに付加する
メソッドにsuperを付加すると、オーバーライドされる前(スーパークラス)のメソッドを呼び出すことができます。(オーバーライドの項でも説明しています)
メソッドにthisを追加 | super.メソッド名(引数) |
---|---|
記述例 | super.execute() ; |
superをコンストラクタ内で利用する
コンストラクタ内からスーパークラスのコンストラクタを呼び出す際に利用できます。但し、スーパークラスのコンストラクタを呼び出す場合は、必ず先頭に記述する必要があります。
コンストラクタをsuperで呼び出し | super(引数) |
---|---|
記述例 | Test(String s, int n){ 空白super(s, n); 空白System.out.println(“初期化しました”) ; } |
super サンプルプログラム
以下のプログラムを「SuperTest.java」「Number42.java」という名前でWorkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、Number42.javaをコンパイルしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class SuperTest { String name = "乗算"; SuperTest(){ System.out.println("スーパークラスのコンストラクタ"); } //乗算結果を表示する void execute(int a, int b){ System.out.println(a * b); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Number42 extends SuperTest{ String name ="等比数列"; Number42(){ super(); } //オーバーライド(乗算表示を利用して等比数列を表示) void execute(int a, int b){ System.out.println(super.name + "を利用して" + name + "を表示"); System.out.println(a); for(int i = 0; i < 10; i++){ //スーパークラスのメソッドを利用 super.execute(a,b); a = a * b; } } public static void main(String[] args){ Number42 n42 = new Number42(); n42.execute(3,2); } } |
実行例
C:\work>javac Number42.java
C:\work>java Number42
スーパークラスのコンストラクタ
乗算を利用して等比数列を表示
3
6
12
24
48
96
192
384
768
1536
3072
※実行例はコンパイルおよび実行時の例を表示しています。
super 復習問題
- superの説明として正しいものを選んでください。
- 解答群
- superを付加するとアクセス禁止となる
- superを付加するとスーパークラスを指し示す
- superを付加しない場合はsuperが自動的に付加される
- superは自分自身のオブジェクトを指し示す
- フィールド名を「spuer.フィールド名」とした変更した場合の説明として正しいものを選んでください。
- 解答群
- superを付加するとアクセス禁止となる
- superを付加するとローカル変数の扱いとなる
- superを付加すると自クラスのフィールドとして扱う
- superを付加するとスーパークラスのフィールドとして扱う
- super()という記述の説明として正しいものを選んでください。
- 解答群
- super()はスーパークラスのメソッドを指し示し、メソッド内部で記述できる
- super()はスーパークラスのコンストラクタを指し示し、コンストラクタ内部で記述できる
- super()は引数ありのコンストラクタを呼び出す
- super()はコンストラクタを指し示し、コンストラクタ内部であれば記述場所は問わない
- お疲れ様でした。
まとめ
- superはスーパークラスのインスタンス(オブジェクト)を指し示す
- フィールドやメソッドに付加でき、コンストラクタはsuper()として利用できる
- スーパークラスのメソッドを呼び出すことにより、オーバーライド前のメソッドを利用できる
- スーパークラスのコンストラクタを呼び出す際には「super(引数)」として利用できる
- 「super(引数)」はコンストラクタ内部の先頭にしか記述できない