オーバーライドについて
今回は、JAVA学習中に出てきたオーバーライドについて書いていこうと思います。
オーバーライドを端的に説明すると、サブクラス内でスーパークラスで定義しているメソッドと同じ名前でメソッドを再定義することです。
継承関係があるクラスで、スーパークラスで定義したメソッドと目的が同じであるが、処理が異なるメソッドを定義する場合に使用をします。
サブクラスがインスタンス化されオーバーライドされたメソッドが呼び出された際は、
サブクラスで再定義したメソッドが優先的に呼び出されます。
[例]
class Super{
public void print(String s){
System.out.println("Super print :" + s);
}
}
class Sub extends Super{
public void print(String s){
s = "サブクラスでオーバーライドされた文字は"+ s + "です";
System.out.println("Sub print:" + s);
}
public class Main{
public static void main(String[] args){
Super obj1 = new Super(); //スーパークラスのインスタンス化
obj1.print("Java"); //スーパークラスの呼び出し
Sub obj2 = new Sub(); //サブクラスのインスタンス化
obj2.print("Java"); //オーバーライド:サブクラスの呼び出し
[実行結果]
Super print : Java
Sub print : サブクラスでオーバーライドされた文字はJavaです
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[オーバーライドのルール]
➀メソッド名、引数リストがまったく同じであること。
➁戻り値はスーパークラスで定義したメソッドが返す型と同じか、その型のサブクラス型でなくてはいけない
➂アクセス修飾子は、スーパークラスと同じものか、それよりも公開範囲が広いものを使用しなければならない
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サブクラスはスーパークラスのメンバをすべて引継ぐので、オーバーライドは「このメソッドについてはサブクラス側で処理を変えたい」という場合に有効。
参考文献:JavaプログラマSilver se11 信頼と実績の対策テキスト&問題集
山本道子 著