カテゴリ: Javaの継承 更新日: 2026/06/27

Java のコンストラクタと継承(親クラスのコンストラクタを呼ぶ方法)を初心者向けにやさしく解説

135
Java のコンストラクタと継承(親クラスのコンストラクタを呼ぶ方法)

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

新人

「Javaでクラスを継承したとき、親クラスの初期設定はどうするんですか?」

先輩

「それはコンストラクタを使うんだ。親クラスの初期化処理を呼びたいときには、superを使うといいよ。」

新人

「superって前にも出てきたキーワードですね!コンストラクタでも使えるんですか?」

先輩

「うん、super()っていう書き方で、親クラスのコンストラクタを呼び出せるんだ。じゃあ、コンストラクタの基本から順番に見ていこう!」

1. コンストラクタってなに?(Javaでの基本)

1. コンストラクタってなに?(Javaでの基本)
1. コンストラクタってなに?(Javaでの基本)

Javaのコンストラクタとは、クラスからオブジェクトを作ったときに、最初に実行される特別なメソッドです。オブジェクトができた直後に、自動で呼び出されます。

たとえば、「人」を表すクラスがあって、その人の名前を設定したいときに使います。コンストラクタで名前を受け取って、初期設定できるようにしておきます。


public class Person {
    String name;

    // コンストラクタ(クラス名と同じ)
    public Person(String inputName) {
        name = inputName;
    }

    void sayHello() {
        System.out.println("こんにちは、" + name + "です。");
    }
}

このように、クラスの名前と同じ名前のメソッドを作ると、それがコンストラクタになります。戻り値は書かなくてOKです。

そして、このPersonクラスを使ってオブジェクトを作ると、コンストラクタが自動で呼び出されます。


public class Main {
    public static void main(String[] args) {
        Person p = new Person("タナカ");
        p.sayHello();
    }
}

こんにちは、タナカです。

このように、コンストラクタはオブジェクトの初期設定をするための仕組みなのです。

2. 親クラスと子クラスの関係を簡単におさらい

2. 親クラスと子クラスの関係を簡単におさらい
2. 親クラスと子クラスの関係を簡単におさらい

Javaでは、継承という仕組みを使って、すでにあるクラス(親クラス)から別のクラス(子クラス)を作ることができます。親クラスに共通の処理を書いておくと、子クラスで再利用できます。

たとえば、「動物」を表すクラスがあって、「犬」や「猫」などのクラスがそれを継承するというイメージです。


public class Animal {
    void move() {
        System.out.println("動きます。");
    }
}

public class Dog extends Animal {
    void bark() {
        System.out.println("ワンワン!");
    }
}

このように、DogクラスはAnimalクラスを継承しています。なので、Dogクラスは親であるAnimalのmove()メソッドもそのまま使えます。


public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.move();  // 親クラスのメソッド
        dog.bark();  // 子クラスのメソッド
    }
}

動きます。
ワンワン!

このように、Javaの継承を使えば、親クラスの機能をそのまま使えるだけでなく、必要に応じて子クラスで追加変更もできます。

このあと紹介する「親クラスのコンストラクタを呼ぶ方法」も、Javaの継承初期設定をうまく組み合わせるための大切な考え方です。

3. 親クラスのコンストラクタは自動で呼ばれるの?

3. 親クラスのコンストラクタは自動で呼ばれるの?
3. 親クラスのコンストラクタは自動で呼ばれるの?

Javaでは、子クラスのオブジェクトを作るとき、親クラスのコンストラクタが自動で呼び出されます。ただし、それは「引数のないコンストラクタ」が親クラスにある場合だけです。

たとえば、親クラスに何も書かなかったとしても、Javaが自動で空のコンストラクタを用意してくれます。これを「デフォルトコンストラクタ」と呼びます。


public class Parent {
    public Parent() {
        System.out.println("親クラスのコンストラクタ");
    }
}

public class Child extends Parent {
    public Child() {
        System.out.println("子クラスのコンストラクタ");
    }
}

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

親クラスのコンストラクタ
子クラスのコンストラクタ

このように、super()と書かなくても、Javaが自動で親の引数なしコンストラクタを呼んでくれます。

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

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

※ Amazon広告リンク

4. super()を使って親のコンストラクタを明示的に呼ぶ

4. super()を使って親のコンストラクタを明示的に呼ぶ
4. super()を使って親のコンストラクタを明示的に呼ぶ

Javaで親クラスのコンストラクタを自分で明示的に呼びたいときは、super()を使います。これは子クラスのコンストラクタの一番最初の行に書く必要があります。

このとき呼ばれるのは、親クラスの「引数なしのコンストラクタ」です。


public class Parent {
    public Parent() {
        System.out.println("親の初期設定");
    }
}

public class Child extends Parent {
    public Child() {
        super();
        System.out.println("子の初期設定");
    }
}

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

親の初期設定
子の初期設定

super()を使うことで、「この子クラスは親のコンストラクタをちゃんと使ってますよ」とJavaに伝えることができます。

5. 親コンストラクタに引数がある場合はどうする?

5. 親コンストラクタに引数がある場合はどうする?
5. 親コンストラクタに引数がある場合はどうする?

もし親クラスのコンストラクタに引数がある場合は、super()の中にその引数を渡す必要があります。自動では呼び出されません

たとえば、親クラスで名前を受け取るようにした場合は、子クラスのコンストラクタでsuper("名前")のように書きます。


public class Parent {
    String name;

    public Parent(String n) {
        name = n;
        System.out.println("親の名前: " + name);
    }
}

public class Child extends Parent {
    public Child(String n) {
        super(n);
        System.out.println("子のコンストラクタ完了");
    }
}

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

親の名前: タナカ
子のコンストラクタ完了

このように、親クラスに引数がある場合は、必ず子クラスからもその値を渡すようにしておかないとエラーになります。

このようなルールを覚えておくと、Javaの継承とコンストラクタの関係がスムーズに理解できるようになります。

6. 子クラスと親クラスのコンストラクタをうまく使い分けよう

6. 子クラスと親クラスのコンストラクタをうまく使い分けよう
6. 子クラスと親クラスのコンストラクタをうまく使い分けよう

Javaでは、子クラスと親クラスのコンストラクタをうまく使い分けることで、コードが見やすくなり、ミスも減ります。

たとえば、親クラスが共通の初期設定を行い、子クラスでは独自の初期設定を行うといった使い方ができます。


public class Animal {
    String type;

    public Animal(String type) {
        this.type = type;
        System.out.println("動物の種類: " + type);
    }
}

public class Cat extends Animal {
    String name;

    public Cat(String type, String name) {
        super(type);
        this.name = name;
        System.out.println("猫の名前: " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat("ネコ科", "ミケ");
    }
}

動物の種類: ネコ科
猫の名前: ミケ

このように、親クラスの共通部分super()で渡し、子クラスの追加部分は自分で設定するという考え方です。

7. よくあるミスとエラー例(super()の位置・書き忘れ)

7. よくあるミスとエラー例(super()の位置・書き忘れ)
7. よくあるミスとエラー例(super()の位置・書き忘れ)

Javaでコンストラクタを使うときに初心者がよくやってしまうミスがあります。とくに注意したいのがsuper()位置書き忘れです。

1つ目はsuper()の位置が間違っているパターンです。super()コンストラクタの1行目でなければなりません。


// 間違った例(コンパイルエラーになる)
public class Dog extends Animal {
    public Dog() {
        System.out.println("犬の初期設定");
        super(); // ←これはダメ!
    }
}

このように、super()より先に何かを書くとエラーになります。

2つ目は、親クラスに引数ありコンストラクタがあるのに、super()を書かないパターンです。


public class Animal {
    public Animal(String type) {
        System.out.println("動物の種類: " + type);
    }
}

public class Dog extends Animal {
    public Dog() {
        // super("イヌ科"); を書き忘れている → エラー!
        System.out.println("犬の初期設定");
    }
}

このように、親に引数が必要なら、必ずsuper()で渡す必要があります。

8. 初心者に伝えたいコンストラクタ設計のコツ

8. 初心者に伝えたいコンストラクタ設計のコツ
8. 初心者に伝えたいコンストラクタ設計のコツ

最後に、Javaのコンストラクタ設計のコツを初心者向けにまとめます。

1. 共通処理は親クラスに書こう
複数のクラスで同じような初期設定が必要なら、親クラスに書いておくと再利用しやすくなります。

2. 子クラスでは必要に応じてsuper()を使う
親クラスに初期化の処理があるなら、super()でしっかり呼び出してあげましょう。

3. コンストラクタが増えてきたら整理しよう
同じクラスに複数のコンストラクタがあるときは、コードが読みにくくなるので、コメントを書いたり、処理を分けるのがおすすめです。

4. まずは簡単な例から慣れる
最初はsuper()だけを使って、親のメッセージを表示するだけの簡単なコードから試してみましょう。

Javaの継承コンストラクタをうまく組み合わせることで、コードをスッキリ整理しながら、使いやすいクラス設計ができるようになります。

まとめ

まとめ
まとめ

Javaのコンストラクタと継承の基本を総復習

今回はJavaのコンストラクタと継承における親クラスのコンストラクタ呼び出しについて、初心者でも理解できるように丁寧に整理しました。Javaプログラミングにおいてコンストラクタはオブジェクト生成時の初期化処理を担当する非常に重要な仕組みであり、継承と組み合わせることでより柔軟で再利用性の高いクラス設計が可能になります。特にJavaのオブジェクト指向プログラミングでは、親クラスと子クラスの関係を理解し、どのように初期化処理を引き継ぐかが重要なポイントになります。

superを使った親コンストラクタ呼び出しの重要性

Javaでは子クラスのインスタンスを生成するときに、親クラスのコンストラクタが先に実行される仕組みになっています。このとき、親クラスに引数なしのコンストラクタがある場合は自動的に呼び出されますが、引数付きコンストラクタのみの場合はsuperを使って明示的に呼び出す必要があります。このルールを理解していないと、コンパイルエラーが発生したり、意図した初期化が行われなかったりするため注意が必要です。Java初心者の方は、superは必ずコンストラクタの先頭に書くというルールをしっかり覚えておくことが大切です。

親クラスと子クラスの役割分担を意識する

Javaの継承設計では、親クラスには共通処理をまとめ、子クラスには個別の処理を記述することが基本です。例えば動物クラスで種類を管理し、犬や猫クラスでそれぞれの特徴を追加するような設計にすることで、コードの重複を防ぎながら分かりやすいプログラムを作ることができます。コンストラクタも同様で、親クラスでは共通の初期化処理を行い、子クラスでは追加の初期設定を行うという役割分担が重要になります。この考え方を理解することで、保守性の高いJavaコードを書くことができるようになります。

サンプルプログラムで理解を深める


public class Vehicle {
    String type;

    public Vehicle(String type) {
        this.type = type;
        System.out.println("乗り物の種類: " + type);
    }
}

public class Car extends Vehicle {
    String name;

    public Car(String type, String name) {
        super(type);
        this.name = name;
        System.out.println("車の名前: " + name);
    }

    public static void main(String[] args) {
        Car car = new Car("自動車", "プリウス");
    }
}

乗り物の種類: 自動車
車の名前: プリウス

このようにsuperを使って親クラスのコンストラクタに値を渡すことで、共通の初期化処理を再利用しながら、子クラス独自の処理も追加することができます。Javaのコンストラクタと継承の理解を深めるためには、このようなシンプルな例を何度も試すことが効果的です。

初心者がつまずきやすいポイント

Javaのコンストラクタと継承で初心者がつまずきやすいポイントとして、superの書き忘れや位置の間違いがあります。superは必ずコンストラクタの最初の行に書かなければならず、それより前に処理を書くとエラーになります。また、親クラスに引数付きコンストラクタしかない場合にsuperを省略するとコンパイルエラーになります。これらのルールは一見細かいですが、Javaのオブジェクト生成の仕組みを理解するうえで非常に重要です。

コンストラクタ設計で意識すべきこと

Javaのコンストラクタ設計では、必要最小限の初期化処理を行うことが重要です。過剰に処理を詰め込むと可読性が下がり、バグの原因になります。また、複数のコンストラクタを定義する場合は、どのコンストラクタがどの用途で使われるのかを明確にしておく必要があります。さらに、継承関係が深くなる場合は、親クラスと子クラスの責任範囲を明確に分けることで、コードの見通しが良くなります。

Java初心者が身につけるべき考え方

Javaのコンストラクタと継承を理解することは、オブジェクト指向プログラミングの基礎を身につけるうえで非常に重要です。単にコードを書けるだけでなく、どのようにクラスを設計するかという視点を持つことで、より実践的なスキルが身につきます。最初は難しく感じるかもしれませんが、実際にコードを書きながら試していくことで理解が深まります。特にsuperの使い方やコンストラクタの流れを繰り返し確認することで、自然と理解できるようになります。

先生と生徒の振り返り会話

生徒

Javaのコンストラクタはオブジェクトを作るときに自動で呼ばれる仕組みだと理解できました。

先生

その理解はとても重要です。コンストラクタは初期化処理の中心となる存在です。

生徒

superを使えば親クラスのコンストラクタを呼べるという点も分かりました。

先生

はい。特に引数がある場合は必ずsuperで渡す必要があります。

生徒

親クラスと子クラスで役割を分けることも大切ですね。

先生

その通りです。共通処理は親に、個別処理は子に書くことで分かりやすい設計になります。

生徒

これからはコンストラクタと継承を意識してコードを書いてみます。

先生

ぜひ実践してみてください。Javaのオブジェクト指向理解が大きく進みます。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaのコンストラクタとは、具体的にどのような役割を持つ仕組みなのですか?

Javaのコンストラクタは、クラスからインスタンス(オブジェクト)を生成した瞬間に、自動的に実行される特別なメソッドのことです。主な役割は、オブジェクトの「初期設定」や「初期化処理」を行うことです。例えば、クラス内の変数に最初の値を代入したり、プログラムが動き出す準備を整えたりするために使用されます。Javaプログラミングにおいて、オブジェクトが正しく動作するための土台を作る非常に重要な要素です。
Javaの継承の一覧へ
新着記事
Python
NumPyのdtypeとは?データ型の意味と仕組みを初心者向けに解説
NumPyのdtypeとは?データ型の意味と仕組みを初心者向けに徹底解説
Dart
Dartのクラスの作り方!定義・インスタンス生成の基礎
Dartのクラスの作り方を完全解説!初心者でも理解できるクラス定義とインスタンス生成の基礎
Java
Javaの同一性と同値性
Javaの同一性と同値性をわかりやすく解説!初心者向けの基礎知識
AWS
【AWS】s3 lsコマンドの使い方まとめ【オプション・ワイルドカード・日付指定】
【AWS】s3 lsコマンドの使い方まとめ【オプション・ワイルドカード・日付指定】
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】S3の料金体系まとめ!無料枠・課金ポイント・見積もり方法まで
【AWS】S3の料金体系まとめ!無料枠・課金ポイント・見積もり方法まで

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク