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

Javaにおける**「メソッドのオーバーライド(Override)」とは、スーパークラス(基底クラス)で定義されたメソッドを、サブクラス(派生クラス)で再定義することを指します。これは、Javaの継承(Inheritance)ポリモーフィズム(多態性)**の重要な要素の一つです。


1. メソッドのオーバーライドの目的

  • スーパークラスの持つ処理をサブクラスで特化・変更したい場合に用います。

  • 実行時の動作(動的バインディング)によって、実際のオブジェクト型に応じたメソッドが呼び出されるため、柔軟なプログラム設計が可能になります。


2. オーバーライドの基本ルール

オーバーライドを行う際には以下のルールを守る必要があります:

ルール項目 内容
メソッド名 スーパークラスと同じである必要があります
引数の型と数 スーパークラスと同じである必要があります(=シグネチャが同一)
戻り値の型 スーパークラスと同じかサブクラス型(共変戻り値)である必要があります
アクセス修飾子 同じかよりアクセス範囲の広い修飾子である必要があります
例外の制限 スーパークラスのメソッドが投げる例外の同じかそれ以下の範囲である必要があります
static / final指定 staticまたはfinalメソッドはオーバーライドできません

3. オーバーライドの記述例

java
class Animal { void speak() { System.out.println("動物が鳴いています"); } } class Dog extends Animal { @Override void speak() { System.out.println("犬がワンと鳴きます"); } }

この例では、Animal クラスの speak() メソッドを、Dog クラスがオーバーライドしています。


4. @Override アノテーション

  • @Override アノテーションを付けることで、オーバーライドしていることを明示的に示すことができます。

  • コンパイラがオーバーライドの正しさをチェックしてくれるため、スペルミスやシグネチャの誤りを防ぐのに役立ちます。


5. ポリモーフィズムとの関係

java
Animal a = new Dog(); a.speak(); // 「犬がワンと鳴きます」と出力される

このように、スーパークラス型の変数であっても、実際のオブジェクトがサブクラスであれば、サブクラスのオーバーライドされたメソッドが呼び出されます。これがポリモーフィズムの本質です。


まとめ

  • メソッドのオーバーライドは、Javaにおけるオブジェクト指向の柔軟性を実現する鍵です。

  • スーパークラスの汎用的な処理を、サブクラスで具体的・専門的に置き換えることができます。

  • @Override アノテーションを活用することで、安全で明確なコードが書けます。

生成日:2025/05/03