カテゴリ: Java 更新日: 2025/12/27

Javaの継承を完全ガイド!初心者でもわかるオブジェクト指向プログラミング

継承
継承

先生と生徒の会話形式で理解しよう

生徒

「Javaの継承って何ですか?よく聞くけど、どういう意味か分かりません。」

先生

「良い質問ですね!継承は、Javaのオブジェクト指向プログラミングの重要な概念の一つで、簡単に言うと、既存のクラスの機能を引き継いで新しいクラスを作る仕組みです。」

生徒

「それって、何か便利なんですか?」

先生

「はい、とても便利です!例えば、共通の機能を親クラスにまとめて、子クラスでその機能を使ったり拡張したりできます。それでは、詳しく見ていきましょう!」

1. Javaの継承とは?

1. Javaの継承とは?
1. Javaの継承とは?

Javaの継承とは、既に存在するクラス(親クラスまたはスーパークラス)から、その機能を引き継いだ新しいクラス(子クラスまたはサブクラス)を作成する仕組みです。継承を使うことで、コードの再利用が簡単になり、共通の処理を一箇所にまとめることができるため、プログラムの管理が楽になります。

2. 継承の基本的な使い方

2. 継承の基本的な使い方
2. 継承の基本的な使い方

継承の使い方を理解するために、次のコードを見てください。ここでは、親クラスであるAnimalと、子クラスであるDogを定義しています。


class Animal {
    void eat() {
        System.out.println("食べています...");
    }
}

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

public class InheritanceExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat(); // 継承されたメソッド
        dog.bark(); // 子クラス独自のメソッド
    }
}

この例では、DogクラスはAnimalクラスを継承しています。そのため、DogのインスタンスはAnimaleat()メソッドを使うことができます。


食べています...
ワンワン!

3. 継承の利点

3. 継承の利点
3. 継承の利点

Javaの継承を使用することで、以下のような利点があります。

  • コードの再利用: 既存のクラスを使い回せるため、同じコードを何度も書く必要がありません。
  • コードの拡張: 親クラスの機能を引き継ぎつつ、子クラスで独自の機能を追加することができます。
  • 管理の簡略化: 共通の機能を親クラスにまとめることで、メンテナンスが容易になります。

4. 継承の注意点

4. 継承の注意点
4. 継承の注意点

継承を使う際には、次のような注意点があります。

  • Javaでは単一継承のみが許されています。つまり、一つのクラスは一つの親クラスしか継承できません。
  • 親クラスの機能をそのまま引き継ぐため、意図しない動作が発生することもあります。必要に応じて、メソッドをオーバーライドすることで動作を変更することができます。

5. メソッドのオーバーライド

5. メソッドのオーバーライド
5. メソッドのオーバーライド

子クラスで親クラスのメソッドをオーバーライドすることができます。これにより、子クラスは親クラスと同じ名前のメソッドを持ちつつ、動作を変更できます。次の例を見てください。


class Animal {
    void eat() {
        System.out.println("食べ物を食べています...");
    }
}

class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("ドッグフードを食べています...");
    }
}

public class OverrideExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat(); // オーバーライドされたメソッド
    }
}

この例では、DogクラスがAnimalクラスのeat()メソッドをオーバーライドしています。実行結果は次のようになります。


ドッグフードを食べています...

6. superキーワードと親クラスのコンストラクタ呼び出し

6. superキーワードと親クラスのコンストラクタ呼び出し
6. superキーワードと親クラスのコンストラクタ呼び出し

super親クラスの要素へアクセスするためのキーワードです。子クラスのコンストラクタでsuper(...)を使うと、親クラスの初期化を明示できます。また、親クラスのメソッドを呼びたいときにも利用します。


class Animal {
    String name;
    Animal(String name) { this.name = name; }
    void speak() { System.out.println(name + " が何か話しています"); }
}

class Dog extends Animal {
    Dog(String name) { super(name); } // 親のコンストラクタを呼び出す
    @Override
    void speak() {
        super.speak(); // 親の処理を活かしつつ
        System.out.println(name + ":ワン!"); // 子クラスの振る舞いを追加
    }
}

public class SuperDemo {
    public static void main(String[] args) {
        Dog d = new Dog("ポチ");
        d.speak();
    }
}
  

7. オーバーライドのルール(@Override・アクセス範囲・戻り値の共変)

7. オーバーライドのルール(@Override・アクセス範囲・戻り値の共変)
7. オーバーライドのルール(@Override・アクセス範囲・戻り値の共変)

オーバーライドでは、シグネチャ(メソッド名・引数・戻り値の関係)を一致させます。@Overrideを付けるとミスを防げます。アクセス修飾子は親より狭くできません(同等かより広く)。戻り値は親の型のサブタイプ(共変戻り値)ならOKです。


class Parent {
    protected Number score() { return 80; } // 保護(protected)
}

class Child extends Parent {
    @Override
    public Integer score() { // public は protected より広い → OK
        return 95;           // Integer は Number のサブタイプ → OK(共変)
    }

    // ↓ もし private にすると親より狭くなりコンパイルエラー
    // private Integer score() { return 100; }
}

public class OverrideRules {
    public static void main(String[] args) {
        Parent p = new Child();
        System.out.println(p.score()); // 動的ディスパッチで Child#score が呼ばれる
    }
}
  

まとめ

まとめ
まとめ

Javaの継承について、基本的な概念から具体的な例、利点、注意点、さらにはメソッドのオーバーライドまでを解説しました。継承は、オブジェクト指向プログラミングの重要な機能であり、コードの再利用性や保守性を向上させる非常に強力なツールです。しかしながら、単一継承しかできないという制約や、意図しない動作が発生する可能性などの注意点も理解しておく必要があります。

プログラム設計を効率化し、拡張性のあるコードを書くためには、継承を適切に活用することが重要です。また、継承に加えてコンポジション(クラスの中に他のクラスのインスタンスを持つ設計)を組み合わせることで、さらに柔軟性の高いコードを書くことができます。

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

生徒

「今日はJavaの継承について色々学べました。継承を使うとコードの再利用ができるって、本当に便利ですね。」

先生

「そうですね。特にプロジェクトが大きくなると、共通の機能を親クラスにまとめることで管理が非常に楽になりますよ。」

生徒

「ただ、単一継承しかできないっていう点が少し気になりました。他のプログラミング言語ではどうなんですか?」

先生

「良い指摘ですね。他の言語では複数継承が可能なものもありますが、設計が複雑になりやすいという問題もあります。Javaでは代わりにインターフェースを使うことで、複数の型を実現できるんです。」

生徒

「なるほど、インターフェースも重要そうですね。次はそれについて学びたいです!」

先生

「それは良い考えですね。継承とインターフェースを組み合わせることで、より柔軟なプログラムが書けるようになりますよ。」

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

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

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

Javaの継承とは具体的に何をする仕組みですか?

Javaの継承とは、親クラス(スーパークラス)の機能やメソッドを子クラス(サブクラス)で再利用できる仕組みです。これにより、同じコードを何度も書く必要がなくなり、プログラム全体の効率性が向上します。

継承を使うとプログラムがどのように便利になるのですか?

継承を使うと、共通の機能を親クラスにまとめることでコードの再利用が可能になり、新しいクラスで既存の機能をそのまま利用したり、追加機能を拡張したりすることができます。

Javaの単一継承とはどういう意味ですか?

Javaでは一つのクラスが一つの親クラスしか継承できないという仕組みを単一継承と言います。この制約により、設計がシンプルになり、複雑な依存関係を回避することができます。

子クラスで親クラスのメソッドを上書きするにはどうしたら良いですか?

親クラスのメソッドを子クラスで上書きするには、「@Override」アノテーションを使用してメソッドを再定義します。これをメソッドのオーバーライドと言い、親クラスの動作を変更する際に利用されます。

Javaの継承で共通するエラーや問題にはどのようなものがありますか?

よくあるエラーには、親クラスのメソッドを誤って呼び出す、またはアクセス修飾子の制限(protectedやprivate)を誤解することがあります。これらの問題を避けるため、正確にアクセス修飾子を理解することが重要です。

継承とコンポジションの違いは何ですか?

継承は親クラスから子クラスへ機能を引き継ぐ仕組みですが、コンポジションはクラス内で他のクラスのインスタンスを持つ仕組みです。コンポジションは柔軟性が高く、変更に強い設計が可能です。

Javaで継承を使う際に気をつけるべきポイントは何ですか?

継承を使う際には、親クラスの機能が子クラスに自動的に引き継がれるため、意図しない動作が発生する可能性があります。また、親クラスと子クラスの依存関係が強くなりすぎると保守性が低下するので注意が必要です。

Javaのインターフェースは継承とどう違うのですか?

Javaのインターフェースは、複数の型を実現するための仕組みです。一方、継承は一つの親クラスから機能を受け継ぎます。インターフェースを使うと、複数のインターフェースを実装することができ、より柔軟な設計が可能です。

オーバーライドとオーバーロードの違いは何ですか?

オーバーライドは親クラスのメソッドを子クラスで再定義することを指します。一方、オーバーロードは同じクラス内でメソッド名が同じでも、引数の数や型が異なるメソッドを複数定義することを指します。

継承を使ったコードの例をもっと見たい場合、どうすれば良いですか?

公式ドキュメントやオンラインチュートリアル、またはこのブログ記事の関連リンクを参考にすると、継承を使った実例や詳細な解説を学ぶことができます。
カテゴリの一覧へ
新着記事
JavaのHttpServletResponseWrapperを完全解説!初心者でも理解できるレスポンス処理のしくみ
JavaのScannerクラスの使い方を徹底解説!初心者でも簡単に学べる入力処理
JavaのArrayListクラスとaddメソッドを完全解説!初心者でもわかるリスト操作
Javaの@Idアノテーションを徹底解説!初心者でもわかるデータベースとの連携方法
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.5
Java&Spring記事人気No5
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介