【Java】2つのsuperの違い

Javaの学習しているとsuperという文法が登場します。

本記事では、Javaに登場する2つのsuperについての違いを紹介します。

結論

superは、親クラスのメンバを呼び出す意味と親クラスのコンストラクタを呼び出す意味があります。

では、この2つの意味を詳しく見ていきます。

親クラスのメンバを呼び出す

以下のコードは、子クラスが親クラスのメンバを呼ぶ具体例になります。

親クラス

public class ParentClass{
    String name;
    public void hello(){
        System.out.println("My name is " + this.name);
    }
}

子クラス

public class Child extends ParentClass {
    public void newHello(){
        super.name = "tanaka";
        super.hello();
    }
}

子クラスの3行目で、親クラスのnameフィールドを呼び出しています。

子クラスの4行目で、親クラスのhelloメソッドを呼び出しています。

ドットは、~のという意味です。

superは、今より1つ上のクラス(親クラス)という意味です。

つまり

super.フィールド名は、今より1つ上のフィールド名という意味となり、

super.メソッド名は、今より1つ上のメソッド名という意味になります。

親クラスのコンストラクタを呼び出す

以下のコードは、子クラスのコンストラクタで親クラスのコンストラクタを呼び出しています。

親クラス

public class ParentClass{
    String name;
    public void hello(){
        System.out.println("My name is " + this.name);
    }
    public ParentClass(String name){
        this.name = name;
    }
}

子クラス

public class Child extends ParentClass {
    public void newHello(){
        super.hello();
    }
    public Child(){
        super("tanaka");
    }
}

子クラスの6行目で親クラスのコンストラクタを呼び出しています。

super(引数)は、今より1つ上のクラス(親クラス)のコンストラクタという意味になります。

まとめ

superという予約語は、今より1つ上のインスタンス部分を表すという意味