Javaのメソッドオーバーライドとは?仕組みとサンプルコードを解説
オーバーライドとは
オーバーライド(Override)とは、サブクラスが親クラスから継承したメソッドを、自身の要件に合わせて再定義できる機能です。これにより、サブクラスはその型に固有の振る舞いを実装することができます。
オブジェクト指向の観点で言えば、オーバーライドとは「既存のメソッドの機能を上書きする」ことを意味します。
オーバーライドの例
具体的な例を見てみましょう。以下のコードでは、Animal クラスの move() メソッドを、Dog クラスがオーバーライドしています。
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal型の参照とオブジェクト
Animal b = new Dog(); // Animal型の参照だがDogオブジェクト
a.move(); // Animalクラスのメソッドが実行される
b.move(); // Dogクラスのメソッドが実行される
}
}実行結果
このプログラムを実行すると、次のような出力が得られます。
Animals can move
Dogs can walk and run
なぜDogクラスのメソッドが呼ばれるのか
上記の例では、変数 b の型は Animal であるにもかかわらず、Dog クラスの move() メソッドが実行されている点に注目してください。その理由は以下の通りです。
- コンパイル時: チェックは参照変数の型(
Animal)に対して行われます。Animalクラスにmove()メソッドが存在するため、コンパイルは正常に完了します。 - 実行時: JVM(Java仮想マシン)が実際のオブジェクトの型(
Dog)を判別し、そのオブジェクトに属するメソッドを実行します。
したがって、上記の例ではプログラムは問題なくコンパイルされ、実行時には各オブジェクトに固有のメソッドが呼び出されます。この仕組みは「動的メソッドディスパッチ」とも呼ばれ、ポリモーフィズム(多態性)を実現するための重要な基盤となっています。
-
Javaメソッドのオーバーライドのルールを徹底解説
Javaにおいて、メソッドを適切にオーバーライドするためには、いくつかの重要なルールを守る必要があります。この記事では、オーバーライドを行う際に考慮すべきルールを項目別に整理し、わかりやすく解説します。 オーバーライドの基本ルール 引数リストは、オーバーライド対象のメソッドと完全に同一である必要があります。 戻り値の型は、スーパークラスで宣言された元のメソッドの戻り値の型と同じであるか、そのサブタイプ(共変戻り値)である必要があります。 インスタンスメソッドは、サブクラスに継承されている場合にのみオーバーライドできます。継承されていないメソッドはオーバーライドできません。 コンストラクタは
-
JavaのtoString()メソッドをオーバーライドする目的とは?意味と実装例を解説
JavaにおけるtoString()メソッドとは、どのような役割を持つメソッドなのでしょうか? toString()は、クラスのオブジェクトを文字列(String)として表現したい場合に使用するメソッドです。このメソッドを呼び出すと、オブジェクトの内容をテキスト形式で返してくれます。 実は、オブジェクトをSystem.out.println()などで出力するとき、Javaコンパイラは自動的にそのオブジェクトのtoString()メソッドを呼び出します。つまり、toString()を適切にオーバーライドしておけば、オブジェクトの中身がわかりやすい形で出力されるようになります。 それでは、具体的な