カテゴリ: Javaの継承 更新日: 2025/06/01

Java の super キーワードとは?親クラスのメソッドを呼び出す方法を初心者向けにやさしく解説

134
Java の super キーワードとは?親クラスのメソッドを呼び出す

新人と先輩の会話形式で理解しよう

新人

「Javaで親クラスのメソッドを呼び出したいときって、どうすればいいんですか?」

先輩

「そのときはsuperというキーワードを使うんだ。親クラスのメソッドを呼び出すのに使える便利な仕組みだよ。」

新人

「スーパっていうんですね!具体的にどう使うのか教えてください!」

先輩

「じゃあ、superキーワードの基本から見ていこう!」

1. superキーワードとは?(意味と使い方の基本)

1. superキーワードとは?(意味と使い方の基本)
1. superキーワードとは?(意味と使い方の基本)

Javaのsuperキーワードは、子クラスから親クラスのメソッドを呼び出したいときに使います。Javaでは、親子関係のあるクラスで、同じ名前のメソッドを持つことがよくあります。

そんなとき、子クラスでsuper.メソッド名()と書くと、親クラスのメソッドを明確に指定して呼び出すことができます。

次の例では、親クラスのsayHello()を子クラスでsuperを使って呼び出しています。


public class Parent {
    void sayHello() {
        System.out.println("こんにちは、親クラスです。");
    }
}

public class Child extends Parent {
    void sayHello() {
        super.sayHello(); // 親クラスのメソッドを呼び出す
        System.out.println("こんにちは、子クラスです。");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.sayHello();
    }
}

こんにちは、親クラスです。
こんにちは、子クラスです。

このように、super.sayHello()を書くことで、子クラスから親クラスのメソッドを呼び出すことができます。

2. 親クラスのメソッドを呼び出すとはどういうこと?

2. 親クラスのメソッドを呼び出すとはどういうこと?
2. 親クラスのメソッドを呼び出すとはどういうこと?

親クラスのメソッドを呼び出すというのは、すでに親クラスで用意されている処理を、そのまままたは一部だけ使いたいときに行うことです。

たとえば、同じようなメッセージを表示する処理や、ログイン処理、共通のチェック処理などを親クラスに書いておいて、子クラスではそれを活用しながら、追加の動作を行うという形です。

現実の例にたとえると、「あいさつをする」という行動を親クラスに書いておいて、「あいさつしてから自分の名前を言う」という動作を子クラスで追加するようなものです。


public class Greeting {
    void sayHi() {
        System.out.println("こんにちは!");
    }
}

public class PersonalGreeting extends Greeting {
    void sayHi() {
        super.sayHi(); // 親クラスのsayHiを呼び出す
        System.out.println("私はタナカです。");
    }
}

public class Main {
    public static void main(String[] args) {
        PersonalGreeting pg = new PersonalGreeting();
        pg.sayHi();
    }
}

こんにちは!
私はタナカです。

このように、親クラスの処理を使いながら、子クラスで追加のメッセージを表示することができます。これがJavaのsuperを使った親クラスのメソッド呼び出しの基本的な考え方です。

親の動きも活かしながら、自分の動きを加えたいときにsuperはとても便利です。

3. superでメソッドを呼び出す基本の書き方

3. superでメソッドを呼び出す基本の書き方
3. superでメソッドを呼び出す基本の書き方

Javasuperを使って親クラスのメソッドを呼び出すときは、super.メソッド名()と書きます。これだけで、子クラスの中から親クラスのメソッドを実行できます。

まずはシンプルな例を見てみましょう。


public class Animal {
    void introduce() {
        System.out.println("これは動物です。");
    }
}

public class Dog extends Animal {
    void introduce() {
        super.introduce();
        System.out.println("これは犬です。");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.introduce();
    }
}

これは動物です。
これは犬です。

このように、子クラスのDogsuper.introduce()を使って、親クラスAnimalのintroduceメソッドを呼び出し、そのあとに自分の動作を続けることができます。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. 親クラスの動きを活かして子クラスを拡張する例

4. 親クラスの動きを活かして子クラスを拡張する例
4. 親クラスの動きを活かして子クラスを拡張する例

Javaのsuperキーワードを使うことで、親クラスの共通処理を活かしながら、子クラスで独自の動作を追加できます。

たとえば、ゲームのキャラクターが「動く」という動作を親クラスに持ち、それぞれのキャラで独自の動き方を追加したいときに便利です。


public class Character {
    void move() {
        System.out.println("キャラクターが動きます。");
    }
}

public class Hero extends Character {
    void move() {
        super.move();
        System.out.println("ヒーローが走ります。");
    }
}

public class Monster extends Character {
    void move() {
        super.move();
        System.out.println("モンスターがゆっくり歩きます。");
    }
}

public class Main {
    public static void main(String[] args) {
        Hero hero = new Hero();
        Monster monster = new Monster();

        hero.move();
        monster.move();
    }
}

キャラクターが動きます。
ヒーローが走ります。
キャラクターが動きます。
モンスターがゆっくり歩きます。

このように、共通の処理は親クラスに書いて、それをsuperで呼び出しながら、子クラスで動きを追加すれば、重複せずきれいなコードになります。

5. superとthisの違いを簡単に理解しよう

5. superとthisの違いを簡単に理解しよう
5. superとthisの違いを簡単に理解しよう

Javaを勉強していると、superとよく似たキーワードにthisがあります。この二つの違いを混乱する人は多いですが、簡単に覚える方法があります。

superは「親クラスのものを使う」ときに使います。一方で、thisは「自分のクラスのものを使う」ときに使います。

次の例で見てみましょう。


public class Parent {
    String name = "親";

    void showName() {
        System.out.println("名前: " + name);
    }
}

public class Child extends Parent {
    String name = "子";

    void showName() {
        System.out.println("this.name: " + this.name);
        System.out.println("super.name: " + super.name);
    }
}

public class Main {
    public static void main(String[] args) {
        Child c = new Child();
        c.showName();
    }
}

this.name: 子
super.name: 親

このように、this.name子クラスのnameを、super.name親クラスのnameを指しています。

この違いを意識しておけば、Javaでsuperとthisを使い分けるときに迷いません。

superは親、thisは自分と覚えておきましょう。

6. superを使うときの注意点(メソッド名の間違いなど)

6. superを使うときの注意点(メソッド名の間違いなど)
6. superを使うときの注意点(メソッド名の間違いなど)

Javasuperを使うとき、親クラスのメソッド名引数の形を間違えると、うまく呼び出せません。とくに初心者はスペルミスに気づかず、思ったように動かないことがあります。

たとえば、次のように親クラスにshowInfoというメソッドがあるのに、super.showinfo()と書いてしまうと、エラーになります。


public class Parent {
    void showInfo() {
        System.out.println("親の情報を表示します。");
    }
}

public class Child extends Parent {
    void showInfo() {
        super.showinfo(); // showinfoは小文字でミス!
        System.out.println("子の情報を表示します。");
    }
}

このようなとき、Javaはshowinfoという名前のメソッドが親に無いと判断して、コンパイルエラーになります。

間違いを防ぐためには、親クラスのメソッド名を確認したり、オーバーライド時に@Overrideをつけることで、間違いがあればすぐに教えてくれるので安心です。

7. コンストラクタでもsuperは使える(簡単な紹介)

7. コンストラクタでもsuperは使える(簡単な紹介)
7. コンストラクタでもsuperは使える(簡単な紹介)

Javaのsuperは、メソッドだけでなく、コンストラクタにも使うことができます。コンストラクタとは、クラスが作られたときに最初に実行される特別なメソッドのことです。

親クラスにコンストラクタがあるとき、子クラスでそれを呼び出すにはsuper()を使います。


public class Parent {
    Parent(String name) {
        System.out.println("親クラス: " + name);
    }
}

public class Child extends Parent {
    Child(String name) {
        super(name); // 親クラスのコンストラクタを呼び出す
        System.out.println("子クラス: " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Child c = new Child("タナカ");
    }
}

親クラス: タナカ
子クラス: タナカ

このように、親クラスのコンストラクタで何か準備をしたいとき、それをsuper()で呼び出せば、子クラスでもその準備が活かせるというわけです。

8. 初心者向け!superを使ったコード設計のヒント

8. 初心者向け!superを使ったコード設計のヒント
8. 初心者向け!superを使ったコード設計のヒント

これまで見てきたように、Javaのsuperは、親クラスの機能をうまく活かすための道具です。

コードを設計するとき、「共通の処理は親クラスにまとめて書く」「子クラスでは追加や変更だけを書く」という考え方をすると、コードがきれいでわかりやすくなります。

たとえば、複数のクラスで「同じあいさつ」や「ログ表示」などをするなら、それは親クラスに書いて、子クラスではsuperで呼び出すようにします。

このようにすれば、コードの重複を減らせるだけでなく、あとで変更が必要になったときも親クラスだけを直せばよいので、とても楽になります。

Javaの学習を進めていくと、クラスの設計力がとても大切になります。superを使って親の機能を活かすという考え方を、今のうちから身につけておくと、後でとても役立ちます。

Javaの継承の一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク