Javaの基本文法であるオーバーライドについて解説します。
似たような名称でオーバーロードがありますが、別物ですので注意してください。
オーバーライドとは
継承関係にあるクラスのサブクラスにおいて親クラスのメソッドを上書きする技術です。
以下のクラスを作成し解説します。
クラス | 説明 |
---|---|
Parent | 親クラス |
Child | 子クラス(サブクラス) |
Main | 実行用メインクラス |
◆Parent
public class Parent { public void show() { System.out.println("Call Parent"); } }
◆Child
public class Child extends Parent { //親クラスのメソッドを上書き public void show() { System.out.println("Call Child"); } }
◆Main
public class Main { public static void main(String[] args) { //親クラスをインスタンス化 Parent parent = new Parent(); parent.show(); //親クラスのメソッドを実行 //子クラスをインスタンス化 Child child = new Child(); child.show(); //子クラスのメソッドを実行 } }
◆実行結果
Call Parent
Call Child
親クラスのメソッドが上書きされていることが分かると思います。
これがオーバーライドです。
アノテーションとは
他サイト等を参照すると下記のようなコーディングを見かけることがあるかもしれません。
public class Child extends Parent { @Override public void show() { System.out.println("Call Child"); } }
この「@Override」はアノテーションと呼ばれるものです。メソッドやクラスに対して付与することが出来ますが、何らかの情報や制御を付け加えるものになります。
効果はアノテーションの種類によって異なりますが「@Override」についてはオーバーライドしたメソッドであることを示すただの情報を扱うものになります。
あっても、なくてもオーバーライドは実現できますが、プログラムの分かりやすさの観点から言うと記述しておくとよいでしょう。
参考までに
アノテーションはJava標準ライブラリで提供されているものの他に、各種フレームワークや自身で定義することも可能です。より高度なものになるとプログラムの実行制御に使われるものもあります。
終わりに
文法としてはそれほど難しいものではなかったと思います。
利用するシーンとしてはほぼ共通的な機能だけど一部のサブクラスだけは特殊な動作をさせたい場合や、インターフェイスだけ定義しておき他はすべてサブクラスで実装することを義務付ける場合に利用します。