カテゴリ: JavaSilver試験対策 更新日: 2025/03/09

Javaのオーバーライド完全解説!初心者向けの基礎知識と正しいルール

049
Javaのオーバーライド

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

生徒

「オーバーライドって具体的にどういうルールがありますか?」

先生

「オーバーライドは、スーパークラスのメソッドをサブクラスで再定義することです。引数の型や順番などいくつかの重要なルールがあります。詳しく見ていきましょう!」

1. オーバーライドとは?

1. オーバーライドとは?
1. オーバーライドとは?

Javaのオーバーライドとは、スーパークラス(親クラス)に定義されたメソッドをサブクラスで再定義することを指します。オーバーライドは、親クラスのメソッドをサブクラスでより具体的な処理に置き換えたいときに使用されます。

オーバーライドには次の重要なルールがあります:

  • メソッド名はスーパークラスと同じでなければならない。
  • 引数リスト(型、数、順番)がスーパークラスと完全に一致している必要がある。
  • 戻り値の型はスーパークラスと同じか、サブクラスである必要がある(共変戻り値)。
  • アクセス修飾子は、スーパークラスのメソッドと同じか、より広い範囲(例:protected → public)にする必要がある。
  • @Overrideアノテーションを付けて、コンパイル時にオーバーライドの正確性をチェックするのが推奨されます。

2. 基本的なオーバーライドの例

2. 基本的なオーバーライドの例
2. 基本的なオーバーライドの例

次のコードは、基本的なオーバーライドの例です:


class Parent {
    public void greet() {
        System.out.println("Hello from Parent!");
    }
}

class Child extends Parent {
    @Override
    public void greet() {
        System.out.println("Hello from Child!");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.greet(); // 出力: Hello from Child!
    }
}

このコードでは、ParentクラスのgreetメソッドがChildクラスでオーバーライドされています。実行時にはChildクラスのgreetメソッドが呼び出され、「Hello from Child!」と出力されます。

3. 共変戻り値の例

3. 共変戻り値の例
3. 共変戻り値の例

オーバーライドでは、戻り値の型が親クラスの型と完全に同じである必要はありません。戻り値の型が親クラスの型のサブクラスであれば許容されます。これを共変戻り値と呼びます。


class Animal {
    public Animal speak() {
        System.out.println("Animal sound");
        return new Animal();
    }
}

class Dog extends Animal {
    @Override
    public Dog speak() {
        System.out.println("Woof Woof!");
        return new Dog();
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.speak(); // 出力: Woof Woof!
    }
}

このコードでは、親クラスAnimalの戻り値型がAnimalであるのに対し、サブクラスDogは戻り値型にDogを指定しています。これは共変戻り値として正しくオーバーライドされています。

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

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

※ Amazon広告リンク

4. アクセス修飾子とオーバーライド

4. アクセス修飾子とオーバーライド
4. アクセス修飾子とオーバーライド

オーバーライドでは、アクセス修飾子のルールも重要です。オーバーライドするメソッドのアクセス修飾子は、スーパークラスのメソッドよりも広い範囲にする必要があります。


class Parent {
    protected void display() {
        System.out.println("Protected method in Parent.");
    }
}

class Child extends Parent {
    @Override
    public void display() {
        System.out.println("Public method in Child.");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.display(); // 出力: Public method in Child.
    }
}

このコードでは、親クラスのdisplayメソッドがprotected修飾子を持つのに対し、サブクラスのdisplayメソッドはpublic修飾子を持っています。これは正しいオーバーライドです。

5. 試験対策ポイント

5. 試験対策ポイント
5. 試験対策ポイント
  • オーバーライドでは、引数リスト(型、数、順番)がスーパークラスと同じでなければならない。
  • 戻り値型は同じ型か、共変戻り値を使用できる。
  • アクセス修飾子は、スーパークラスのメソッドより広い範囲にする必要がある。
  • @Overrideアノテーションを使用して、コンパイル時に正確性をチェックする。

6. まとめ

6. まとめ
6. まとめ

オーバーライドは、Javaでオブジェクト指向プログラミングを実践する上で欠かせない技術です。親クラスで定義されたメソッドを、サブクラスで再定義することで、柔軟で再利用性の高いコードを実現できます。今回解説したように、引数リストや戻り値型、アクセス修飾子のルールを正確に理解することが、正しいオーバーライドを行う鍵となります。また、@Overrideアノテーションを活用することで、間違いを未然に防ぐことも重要です。

さらに、共変戻り値を活用すると、親クラスとサブクラスの設計をより効果的に行うことができます。試験対策としても、今回のポイントをしっかりと復習し、実践に活かしてみてください。

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

生徒

「オーバーライドのルールを詳しく理解できました!共変戻り値って便利なんですね。」

先生

「そうです。特に、親クラスとサブクラスの設計が複雑になるほど、共変戻り値はコードの柔軟性を高めてくれます。」

生徒

「あと、アクセス修飾子のルールも勉強になりました。親クラスより狭い範囲にできないんですね。」

先生

「その通りです。このルールを覚えておけば、コンパイルエラーを未然に防げますよ。どんどん実践してみてください!」

JavaSilver試験対策の一覧へ
新着記事
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広告リンク