🌟
Java言語におけるオーバーロードとオーバーライドの違いについての個人的まとめ
オーバーロードとオーバーライドの違い
結論から先に言うとオーバーロードとオーバーライドは名前が似てるだけで全然違う
- オーバーロードとは、「クラスの中に同じ名前のメソッドをいくつか作ること」
-
オーバーライドとは「親クラスから継承したメソッドの機能を書き換えること」
オーバーロードとは
- オーバーロードとは、「クラスの中に同じ名前のメソッドをいくつか作ること」
- 引数の構成を変えることによって同じ名前で機能の違うメソッドを追加できる
- 子クラス内で親クラス内と同名のメソッドを作るとオーバーロードになる
- メソッドのシグネチャー=メソッド名と引数構成(引数の型、個数、並び順)
→引数の構成を変えて各メソッドを差別化する
- 間違ったオーバーロードの例(シグネチャーに違いがない)
public void func(int number, double data)
public int func(int number, double data) //int:戻り値型が違うだけ
private void func(int number, double data) //private:アクセス修飾子が違うだけ
public static func(int number, double data) //static:修飾子が違うだけ
public void func(int n, double x) //n,x:引数の変数名が違うだけ
- 正しいオーバーロードの例(シグネチャーに違いがある)
public void func(String number, double data) //引数の型が違う
public int func(int number) //引数の数が違う
public void func(double data, int number) //引数の並び順が違う
オーバーライドとは
- オーバーライドとは「親クラスから継承したメソッドの機能を書き換えること」
- シグネチャーを変えてはいけない
→引数の構成(シグネチャー)を変えず各メソッドを完全に上書きする
オーバーライドの原則
- シグネチャー、戻り値型、アクセス修飾子を変えない
- ただしアクセス修飾子はより公開範囲が広いものになら変更できる
- また、戻り値がクラス型なら、子クラスの型に変更できる
以上です。間違えが見つかり次第、或いは知識がアップデートされ次第改訂していきます。🙏
Discussion