HOME > オーバーライド

オーバーライド

オーバーライドは、継承元の親クラスと同じメソッド名・同じ引き数のメソッドを定義して、メソッドを上書きすることをいいます。

メソッドを上書きしてしまうので、元のメソッドの機能は無効になります。
※ただし、superキーワードを使うことによって元メソッドの機能を呼ぶこともできます。
 (詳しくは→superをご覧ください。)


【オーバーライド】
 ・メソッドの「メソッド名」「引き数」「戻り値」を全く同じにする必要がある
 ・throws句は子で指定しなくてもオーバーライドとして認識される
 ・throws句のExceptionクラスは親と同じか、サブクラスでなければならない
 ・アクセスレベルは下げる事はできない。(元がpublic指定で、子がprivate指定など)
 ・final修飾子が付いているメソッドはオーバーライドはできない

サンプルソース

 オーバーライドサンプル

★親クラス
public class OyaClass {

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

    //メソッドB
    public void hogeB() throws Exception{
        System.out.println("Oya-hogeB");
    }

    //メソッドC(final指定なのでオーバーライドは不可)
    public final void hogeC(){
        System.out.println("Oya-hogeC");
    }
}


★子クラス public class KoClass extends OyaClass{ //メソッドAをオーバーライドする public void hogeA(){ //←親がpublicなので、privateとかにはできない。 System.out.println("Ko-hogeA"); } //メソッドBをオーバーライドする public void hogeB() throws NullPointerException{ //↑NullPointerExceptionはExceptionのサブクラスなのでOK System.out.println("Ko-hogeB"); } //メソッドD public void hogeD() throws Exception{ System.out.println("Ko-hogeD"); } }
★実行用クラス public class Test { public static void main(String[] args) throws Exception{ KoClass ko = new KoClass(); ko.hogeA(); ko.hogeB(); ko.hogeC(); ko.hogeD(); } }

実行結果

 コマンドプロンプト

C:\>java Test
Ko-hogeA
Ko-hogeB
Oya-hogeC
Ko-hogeD

 hogeA、hogeBはオーバーライドされているので、子クラスのメソッドが呼ばれています。
 hogeCはオーバーライドされていないので、親クラスのメソッドが呼ばれています。
 hogeDは子クラスのみに定義されたメソッドです。


※オーバーライドしたメソッドでも、superキーワードを使うことでオーバーライドされる前の処理を呼ぶこともできます。 詳しくは→superをご覧ください。


Java基本カテゴリ