オーバーライド
オーバーライドとは、継承関係において
「スーパークラスのメソッドの処理をサブクラスの同名のメソッドで重ねて処理結果を変えること」です。
継承関係以外では、この現象は起こりません が、継承するサブクラスを作成するときは、
多少スーパークラスのことを知らないと意図せずオーバーライドしてしまうことがありますので注意してください。
オーバーライドの仕組み
つまり 「スーパークラス と同名の メソッド がサブクラスにあれば、それが優先的に実行される。」
つまり**「メソッド の内容が 上乗せされた」**ような結果になります。
サンプルコード
こちらは継承元のスーパークラスです。
public class SuperOverride {
public void testOverride() {
System.out.println("オーバーライド前はこの表示が出ます");
}
}
こちらはスーパークラスを継承したサブクラスです。
// スーパークラスを継承します
public class SubOverride extends SuperOverride {
public void testOverride() {
//testOverrideメソッドをオーバーライドします。
System.out.println("オーバーライドされるとこの表示になります");
}
}
こちらのクラスで実行します。
public class Main {
public static void main(String[] args) {
SubOverride subor = new SubOverride();
subor.testOverride();
}
}
実行結果
オーバーライドされるとこの表示になります
上記のコードを解説すると
testOverrideメソッドを継承先のサブクラス SubOverride で上書きすることで、出力結果がオーバーライドされた内容になっています。
オーバーライドを回避する書き方(サンプル)
オーバーライドされていない出力をするならこのように記述します
// スーパークラスを継承します
public class SubOverride extends SuperOverride {
public void testOverride() {
//testOverrideメソッドをオーバーライドします。
//スーパークラスのtestOverride メソッドの呼び出し
super.testOverride();
}
}
コード内にもあるように
「super キーワードを指定して」、 testOverride() メソッドを呼び出しています。
こうすることでスーパークラスであるSuperOverrideクラスのtestOverride() メソッドが呼び出されます。
オーバーライドの利用例
特定のサブクラスにおいて、当該メソッドの処理内容を修正・変更する という利用例があります。
**「大本のスーパークラスに手を加えず、修正内容をサブクラスのみに適用したいとき」**にオーバーライドは非常に便利だと思います。
とくに、RPGのキャラが行う特定のアクションを行う場合に、オーバーライドはよく用いられるようです。
すべてのキャラが固有で持っている 「attackメソッド」をオーバーライドして、
- ナッシーは「ねむりごな」
- ルージュラは「あくまのキッス」
- ダグトリオは「じわれ」
といった具合で内容を上乗せします。
【Nassy.java】
public void attack() {
// ねむりごなの処理
}
【kentaros.java】
public void attack() {
// はかいこうせんの処理を書く
}
【Dugtrio.java】
public void attack() {
// じわれの処理を書く
}
以上のように、それぞれ違う部分だけをプログラミングするだけで済むので、効率の良いコードを書けるようになると思います。