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クラスのコンストラクタに渡すものだと勘違いしていました。
素人記事ですので、間違いがあればご指摘ください。