Javaのsuperとは?親クラスのコンストラクタやメソッドを呼び出す書き方

最終更新日

Schoo Java入門 初級【2026年版】第7回 継承とインターフェース

本記事は、Schooの「Java入門 初級【2026年版】」第7回「継承とインターフェース」を学ぶ前後に、Javaの super の考え方を整理したい方向けのステップアップ学習記事です。

ただし、Schooを受講していない方でも、クラス、コンストラクタ、継承の基本を学んだあとに読み進められる内容にしています。

Schoo コースページ:Java入門 初級【2026年版】

super は、子クラスから親クラス側のコンストラクタやメソッドを呼び出すために使うキーワードです。継承したクラスを読むときは、this が自分、super が親を指す、と考えると整理しやすくなります。

superは親クラス側を指すキーワード

継承では、子クラスが親クラスの機能を利用できます。その中で、親クラス側の処理を明示して呼び出したいときに super を使います。

public class Child extends Parent {
    private String givenName;

    public Child(String familyName, String givenName) {
        super(familyName);
        this.givenName = givenName;
    }
}

この例では、ChildParent を継承しています。super(familyName); は、親クラス Parent のコンストラクタを呼び出す書き方です。

図解:super(…) は親クラスのコンストラクタへ値を渡す
子クラス Child
public Child(
  String familyName,
  String givenName) {
  super(familyName);
  this.givenName = givenName;
}
familyNameを
親へ渡す
親クラス Parent
public Parent(
  String familyName) {
  this.familyName = familyName;
}
super(familyName); は、親クラス Parent のコンストラクタを呼び出します。親クラス側で持つ familyName の初期化を任せるための書き方です。
子クラスのオブジェクトを作るときも、親クラス側の初期化が必要です。

super(…) は親クラスのコンストラクタを呼び出す

親クラスにコンストラクタがある場合、子クラスのコンストラクタから親クラス側の初期化を呼び出す必要があります。

public class Parent {
    private String familyName;

    public Parent(String familyName) {
        this.familyName = familyName;
    }
}

Parent は、コンストラクタで familyName を受け取り、親クラス側のフィールドにセットしています。

public class Child extends Parent {
    private String givenName;

    public Child(String familyName, String givenName) {
        super(familyName);
        this.givenName = givenName;
    }
}

Child のコンストラクタでは、まず super(familyName); で親クラス側の初期化を行い、そのあとで this.givenName = givenName; によって子クラス側のフィールドを初期化しています。

thisは自分、superは親

thissuper は似て見えますが、指しているものが違います。this は今いるクラス自身、super は親クラス側を指します。

図解:thisは自分、superは親を指す
this
this.givenName は、今いる Child クラス自身のフィールドを指します。
super
super(...) は、親クラス Parent 側のコンストラクタを呼び出します。
Childのコンストラクタ
public Child(String familyName, String givenName) {
  super(familyName);
  this.givenName = givenName;
}
thissuper は、どちらも継承やコンストラクタを読むときに重要なキーワードです。

super.メソッド名() で親のメソッドを呼び出す

super は、親クラスのメソッドを呼び出すときにも使えます。特に、子クラスで同じ名前のメソッドを上書きしている場合に、親クラス側の処理も使いたいときに便利です。

public class ParentMessage {
    public void showMessage() {
        System.out.println("Parentの処理です。");
    }
}

public class ChildMessage extends ParentMessage {
    @Override
    public void showMessage() {
        super.showMessage();
        System.out.println("Childの処理です。");
    }
}

super.showMessage(); は、親クラス ParentMessageshowMessage を呼び出しています。そのあとで、子クラス側の処理を追加しています。

図解:super.メソッド名() で親のメソッドを呼び出せる
子クラスで親の処理も使う例
@Override
public void showMessage() {
  super.showMessage();
  System.out.println(“Childの処理です。”);
}
super.showMessage(); と書くと、子クラスで同じ名前のメソッドを持っていても、親クラス側の showMessage を呼び出せます。
super はコンストラクタだけでなく、親クラスのメソッドを明示して呼び出すときにも使います。

super(…) はコンストラクタの先頭に書く

コンストラクタで super(...) を書く場合は、コンストラクタの先頭に書きます。親クラス側の初期化を先に済ませてから、子クラス側の初期化を行うためです。

public Child(String familyName, String givenName) {
    super(familyName);          // 先に親クラス側を初期化
    this.givenName = givenName; // そのあと子クラス側を初期化
}

子クラスのオブジェクトを作るときは、子クラスだけでなく親クラス側も含めて1つのオブジェクトとして準備されます。そのため、親クラス側の初期化を呼び出す super(...) が必要になります。

確認問題

  1. super(familyName); は何を呼び出している書き方ですか。
  2. this.givenNamesuper(familyName) は、それぞれどちら側を指していますか。
  3. super.showMessage(); はどのクラスの showMessage を呼び出しますか。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

あわせて読みたい関連記事

まとめ

super は、子クラスから親クラス側を指すキーワードです。super(...) は親クラスのコンストラクタを呼び出し、super.メソッド名() は親クラスのメソッドを呼び出します。this は自分、super は親、と分けて考えると、継承したクラスの初期化やメソッド呼び出しを読み取りやすくなります。

シェアする