こんにちは、ともです。
Javaのオーバーライドについて理解をまとめておきます。
オーバーライドとは
オーバーライドとは、子クラスで親クラスのメソッドを再定義することです。
次のように親クラスを作成します。
// 親クラス
public class A {
protected Number method(int a, double b) {
return 0;
}
}
// 子クラス
public class B extends A{
public int method(int a, double b) {
return 1;
}
}
親で定義したmethodを子クラスで再定義しています。
では、再定義のために3つの注意する点があります。
オーバライドの条件
- アクセス修飾子は同じか、より緩い条件
- returnで返す型は同じか、そのサブクラス
- シグニチャが同じ
上記の3つに注意すればオーバーライドできます。
アクセス修飾子は同じか、より緩い条件
// 親クラス
public class A {
protected Number method(int a, double b) {
return 0;
}
}
// 子クラス
public class B extends A{
public int method(int a, double b) {
return 1;
}
}
上記の例では、
- 親クラスの修飾子はprotected
- 子クラスの修飾子はpublic
となっています。
アクセス修飾子同じかより緩い条件を満たしています。
returnで返す型は同じか、そのサブクラス
// 親クラス
public class A {
protected Number method(int a, double b) {
return 0;
}
}
// 子クラス
public class B extends A{
public int method(int a, double b) {
return 1;
}
}
上記の例では、
- 親クラスのreturnは「Number」
- 子クラスのreturnは「int」
となっています。
returnで返す型が同じかサブクラスという条件を満たしています。
シグニチャが同じ
// 親クラス
public class A {
protected Number method(int a, double b) {
return 0;
}
}
// 子クラス
public class B extends A{
public int method(int a, double b) {
return 1;
}
}
シグニチャとは
- メソッド名、引数の型、引数の順番
を指します。
method(int a, double b)の部分がシグニチャです。
上記の例では、method(int a, double b)の部分が、
- メソッド名が同じ
- 引数の型が同じ
- 引数の順番が同じ
なので、同じシグニチャであり、条件を満たしています。
まとめ
オーバーロードについて理解をまとめました。
JavaSilverの取得に向けて勉強中ですが、今回の勉強で頭が整理されました。
JavaSilverの勉強はとてもプログラミングの基礎を学ぶのに良いですね。