はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回はオーバーライドについて説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第15回 オーバーロードです。
オーバーライド
オーバーライドは親クラスから継承されたメソッドの処理を切り替えて使う技術を意味します。
つまり、親クラスから継承されたメソッドはそのまま使えるし、子供クラスで必要な処理で修正して
使うこともできます。
オーバーライドの条件
①子供クラスでオーバーライドしたメソッドの宣言は親クラスのメソッドの宣言と必ず一致である必要があります。
※しかし、メソッドの戻り値のデータ型が既存メソッドの戻り値のデータ型に型変換できるタイプであれば変更できます。
②親クラスのメソッドより大きい範囲のアクセス制御子に変更することはできません。
③親クラスのメソッドより大きい範囲の例外を宣言することができません。
オーバーライドの書き方
オーバーロードは特別な書き方がありませんでしたが、オーバーライドは「@Override」というアテーションをつける必要があります。
サンプル
1 2 3 4 5 6 7 |
public class OverrideSample { public void printHello() { System.out.println("Hello"); } } |
上記のクラスを親クラスとして使います。
子供クラスで「printHello」メソッドをオーバーライドすると
1 2 3 4 5 6 7 |
public class OverrideSampleChild extends OverrideSample{ @Override public void printHello() { System.out.println("Hello World"); } } |
上記のようにオーバーライドします。
サンプル2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class OverrideSample { public int printHello() { System.out.println("Hello"); return 30; } } class OverrideChild extends OverrideSample { @Override public void printHello() { System.out.println("Hello"); } } |
上記のサンプルは、オーバーライドの条件「メソッドの宣言が一致していること」を違反してます。
なので、上記二つのメソッドはオーバーライドに該当されません。
サンプル3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class OverrideSample { public Object printHello() { System.out.println("Hello"); return new Object(); } } class OverrideChild extends OverrideSample { @Override public String printHello() { System.out.println("Hello"); return new String(); } } |
上記のサンプルは、オーバーライドの条件「メソッドの宣言が一致していること」を違反してますが、
エラーが表示されなき、問題なさそうです。
親クラスの戻り値のデータ型を子供クラスのデータ型で型キャストすることができる場合、
データ型が異なってもオーバーライドすることができます。
サンプル4
上記三つの画像も「メソッドの宣言が一致していること」を違反しています。
つまり、オーバーライドするためには引数の順序、データ型が一致する必要があります。
しかし、引数の名前が異なることは構いません。
サンプル5
上記のサンプルも「メソッドの宣言が一致していること」を違反しています。
メソッド名が異なることも「メソッドの宣言が一致していること」条件の違反です。
サンプル6
上記のサンプルは「オーバーライドされるメソッドのアクセス制御子をもとのメソッド狭くしないこと」を違反しています。
アクセス制御子の範囲は「pulic > protected > default > private」の順です。
上記のサンプルのように広くすることは構いません。
サンプル7
上記のサンプルは「オーバーライドされるメソッドに元のメソッドより広い範囲の例外を宣言しないこと」を違反しています。
例外は後の記事で扱います。
終わりに
今回の記事は以上になります。
次回は抽象クラスを学びましょう。
ご覧いただきありがとうございます。
コメント