オーバーライド(Override)

オーバーライドとは

オーバーライドは、親クラスのメソッドを上書きして再定義することです。
親クラスを継承した子クラスで、親クラスのメソッドと同じメソッド名、引数リスト、戻り値型のメソッドを定義することでオーバーライドされます。

以下、オーバーライドのルールです。

  • メソッドのシグニチャが全く同じである。
    (シグニチャとは メソッド名、引数の数、引数の型、引数の並び順で構成された情報のこと)
  • 戻り値型は同じか、継承元の型のサブクラスであること(共変戻り値)
  • 継承元メソッドにthrows句が指定されている場合、サブクラス側で指定しなくてもオーバーライドとして認識される。
  • 継承元メソッドにthrows句が指定されている場合でサブクラス側もthrows句を指定する場合は、継承元と同じExceptionクラスか、そのサブクラスでなければならない。
  • アクセスレベルは継承元と同じか、より広いアクセスレベルであれば指定可能。
    (アクセスレベルは下げる事はできない(継承元がpublicだが、オーバーライド側がprivateを指定するなど))
  • 継承元メソッドにfinal修飾子が指定されている場合は、オーバーライドはできない。
  • RuntimeExceptionおよびRuntimeExceptionサブクラスの例外は、スーパークラスの例外に関係なくスローできる
  • スーパークラスでスローしていてもサブクラスでスローしないことは可能

オーバーライドサンプル

オーバーライドのサンプルコードです。

(OyaClass.java)

public class OyaClass {
  //メソッドA
  public void methodA(){
    System.out.println("Oya-methodA");
  }

  //メソッドB
  public void methodB(){
    System.out.println("Oya-methodB");
  }
}
(KoClass.java)

public class KoClass extends OyaClass{
  //メソッドBをオーバーライド
  @Override
  public void methodB(){
    System.out.println("Ko-methodB");
  }
}
(Test.java)

public class Test {
  public static void main(String[] args){
    KoClass ko = new KoClass();
    ko.methodA();
    ko.methodB();
  }
}
(実行結果)
C:\>java Test Oya-methodA Ko-methodB

Koクラスでは、methodBのみオーバーライドしています。
KoクラスのmethodAを呼ぶとOyaクラスのmethodAが実行され、methodBを呼ぶとKoクラスのmethodBが実行されます。

コメント

タイトルとURLをコピーしました