0
0

More than 3 years have passed since last update.

【Java】二つ以上の引数をsuperに渡す場合の書き方

Posted at

superって何?

これがそもそもわかっていないと何のこっちゃという感じです。

どうやらイメージ的にはメソッドですかね。

正しいのかどうかはわかりませんが、調べても〜ときに使われますとかそういう説明しか見当たらなかったです。

メソッドだと思えば、引数の書き方がイメージしやすい。

superを使いと何がどうなるのかわからないので、こんな風に書いてエラーになります

public class Oya {
  private String name;
  private int score;

// コンストラクタ
  public Oya(String name, int score) {
    this.name = name;
    this.score = score;
  }

  // 子クラスから変数の値を読み込めるようにするgetter
  public String getName() {
    return this.name;
  }

  // 子クラスから変数の値を読み込めるようにするgetter
  public int getScore() {
    return this.score;
  }
}

public class Ko extends Oya {
  // 子クラスのコンストラクタ
  public Ko() {
    // super(name); // ←ダメ
    // super(score); // ←ダメ
    super(name, score); // メソッドに引数を渡す時の要領で書く
  }

  public void sayHello() {
    // nameはOyaクラスでprivateになっているのでthis.nameなどではアクセスできない
   // Oyaクラスでgetterを書いとけば、メソッドを利用してnameの値を返してくれる
    System.out.println("hello! " + this.getName());  // ←最後のところでOyaクラスのgetNameメソッドを呼び出してnameの値を受け取る
  }
}

public static void main(String[] args) {
  Ko bob = new Ko("bob", 10);
  Ko.sayHello();
}

これでうまくいきました。
super(name, score)という書き方をすればコンパイルエラーがなくなり、ちゃんとコンストラクタが動いたもよう。

super(引数1、引数2)という風に二つ以上の引数を渡す

単にこの書き方が思いつかなかったのと、superの使用例が引数が一つのものしか出てこなかったので、メモとして残しておきます。

自分はsuper(引数)という書き方で一つずつ変数をOyaクラスのコンストラクタに渡すものだと勘違いしていました。

素人記事ですので、間違いがあればご指摘ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0