オーバーライドについて
オーバーライドの説明
オーバーライドとは、サブクラス内で、スーパークラスで定義しているメソッドと目的が同じであるが、
処理が異なるメソッドを定義する場合に使用します。
オーバーライドのルール
実際にコードをみてみましょう。
class Parents { //親クラス
A method(int a){}
}
class Childs extends Parents { //サブクラス
A method(int a){}
}
オーバーライドは、メソッド名、引数リストがまったく同じであること、
戻り値はスーパークラスと同じ型もしくは、その型のサブクラス型でなければいけません。
また、アクセス修飾子はスーパークラスと同じものか、それよりも公開範囲が広いものを使用しなければいけません。
・アクセス修飾子
public(広い) ⇨ protected ⇨ デフォルト ⇨ private(狭い)
@Override(アノテーション)について
Java言語では@Override(Overrideアノテーション)を付与することで、「このメソッドはオーバーライドしていること」
ということを明示することが可能です。
class X {
void methodA(){}
}
class Y extend X {
// methodA()をオーバーライドするつもりが、間違えてmethoda()として定義した場合
void methoda(){}
}
上記のように、methodA()を誤ってmethoda()と定義してもコンパイルエラーにはなりません。
単純にmethoda()がYクラスで定義したメソッドとして扱われるからです。
class Y extend X {
@Override
void methoda(){}
}
@Overrideを使用することでオーバーライドの使用を明示的に定義します。
よってメソッド名が異なる場合、コンパイルエラーが発生します。
まとめ
・オーバーライドは、サブクラス内でスーパークラスで定義しているメソッドと目的が同じであるが、処理が異なるメソッドを定義する場合に使用します。
・オーバーライド時の戻り値の型は、スーパークラスと同じもしくはその型のサブクラス型でなければならない。
・オーバーライド時のアクセス修飾子はスーパークラスと同じものか、それよりも公開範囲が広いものを使用しなければならない。
・@Overrideを付与すれば、メソッド名の間違いを防ぐことができる。