【Java】オーバーライドについて徹底的に解説!!

Java

今回の記事ではJava初心者の方向けにオーバーライドについて解説しています。
オーバーライドについて学び、理解することで、実装力が向上します!
オーバーライドは少しわかりにくいところがあるので、「オーバーライドについて理解ができていないので、もっと理解を深めたい」と考えている方もいるのではないでしょうか。
そんな方のためにこの記事ではサンプルコードを用いて、オーバーライドについて解説していきます。
ぜひ最後まで読んでオーバーライドに対する理解を深めて実装力を身につけましょう!

オーバーラードとは

Javaでは「継承」という概念が存在します。
ある親クラスを子クラスが継承することで、親クラスのフィールドやメソッドを子クラスで使うことができるようになります。
オーバーライドはある親クラスを継承した子クラスで親クラスのメソッドの中身を変えることです。

オーバーライドする場合には注意点があります。
メソッドの名前は親クラスのメソッドと同じにするようにしましょう。
またメソッドの引数の型、数、順番を同じにする必要があることです。

オーバーライドの具体的な使い方

それでは実際のコードでオーバーライドを確認してみましょう!

親クラスのメソッドを呼び出す

まずは親クラスと子クラスの2つのクラスを作成します。
子クラスから親クラスのメソッドを呼び出してみましょう。

親クラス(ParentClass)

最初に親クラスを作成します。
クラス名をParentClassとし、出力をするhelloメソッドを作成しました。

/**
 * 親クラス
 * @author uhablog
 *
 */
public class ParentClass {

	/**
	 * 標準出力する親クラスのメソッド
	 */
	public void hello() {
		System.out.println("親クラスに記述されたhelloメソッドです");
	}
}

子クラス(ChildClass)

次に子クラスを作成します。
親クラスを継承するだけで、中身は何も記述しません。

/**
 * 親クラスを継承した子クラス
 * @author uhablog
 *
 */
public class ChildClass extends ParentClass {

}

Mainクラス(動作検証用)

最後に動作検証用のMainクラスです。
mainメソッド内で子クラスのインスタンスを作成し、helloメソッドを呼び出しています。

/**
 * 親クラスと子クラスをテストする
 * @author uhablog
 *
 */
public class Main {

	/**
	 * 動作確認用のmainメソッド
	 * @param args
	 */
	public static void main(String args[]) {

		// 子クラスインスタンスの生成
		ChildClass child = new ChildClass();
		// childクラスのインスタンスで、ParentClassのメソッドを呼び出す
		child.hello();
	}
}

実行結果

mainメソッドの実行結果です。
子クラスのインスタンスでhelloメソッドを呼び出すと、親クラスのメソッドが実行されることがわかります。

親クラスに記述されたhelloメソッドです

オーバーライドのサンプル

子クラス(ChildClass)

ではここからは子クラスでhelloメソッドをオーバーライドしてみます。
子クラスを次のように書き換えます。

/**
 * 親クラスを継承した子クラス
 * @author uhablog
 *
 */
public class ChildClass extends ParentClass {

	/**
	 * 親クラスのhelloメソッドをオーバーライド
	 */
	@Override
	public void hello() {
		System.out.println("子クラスで親クラスのhelloメソッドをオーバーライドしたよ!");
	}
}

実行結果

これを先程のmainメソッドから実行してみると結果は次のようになります。
子クラス内で記述した処理が実行されていることがわかります。

子クラスで親クラスのhelloメソッドをオーバーライドしたよ!

superを使って親クラスの処理を呼び出す

最後にsuperを使うことで、親クラスの処理を呼び出すことができることを確認してみましょう。

子クラス

子クラスのhelloメソッド内を次のように書き換えます。

/**
 * 親クラスのhelloメソッドをオーバーライド
 */
@Override
public void hello() {
	// 注目箇所
	// 親クラスのhelloメソッドを先に呼び出す
	super.hello();
	System.out.println("子クラスで親クラスのhelloメソッドをオーバーライドしたよ!");
}

実行結果

実行すると次のように先に親クラスのメソッドが呼び出されて、その後に子クラスでの処理が実施されます。

親クラスに記述されたhelloメソッドです
子クラスで親クラスのhelloメソッドをオーバーライドしたよ!

アノテーション(@Override)について

オーバーライドしたメソッドの上には@overrideというアノテーションをつけるようにしましょう。
アノテーションをつけることで次のようなメリットがあります。

1つ目はソースコードを読んだ他の人に「このメソッドはオーバーライドしたものです。」と伝えることができることです。
Javaは大規模なシステムの開発にもよく使われるため、構造が複雑になりがちです。
アノテーションをつけることで、他の人にオーバーライドで伝えることはとても有効になってきます。

2つ目はアノテーションをつけることで、エラーを発生させることができるからです。
アノテーションを付けずにオーバーライドをしようとした場合、メソッド名をスペルミスしてしまうとオーバーライドにならずに、別のメソッドとして定義されてしまいます。
しかし、アノテーションを付けていて、メソッド名を間違えた場合はエラーとなり間違っていることに気づくことが出来ます。

まとめ

今回の記事ではJavaのオーバーライドについて解説してきました。

オーバーライドはあるクラスを継承した子クラスの中で、親クラスのメソッドを上書きすることです。
メソッド名を同じにして、引数の型・数・順番を同じにする必要があります。

オーバーライドをしたことをコンパイラや他人に伝えるためにオーバーライドしたメソッドを実装するときはアノテーションをつけるようにしましょう!

タイトルとURLをコピーしました