Javaちょこっとリファレンス
HOME > オーバーライド

オーバーライド

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

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


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

サンプルソース

例)オーバーライドサンプル

OyaClass.java
//★親クラス
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");
    }
}

KoClass.java
//★子クラス
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");
    }

}

Test.java
//★実行用クラス
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基本カテゴリ

HOMEへ戻る TOPへ戻る