オーバーライド

オーバーライドの最新ニュースをまとめて検索!

オブジェクト指向プログラミングにおいてオーバーライド (override)とは、スーパークラスで定義されたメソッドサブクラスで定義しなおし、動作を上書きすることである。

あるクラスAにメソッドMethodがあり、あるクラスSubAがクラスA継承したとする。そのとき、クラスSubAはクラスAにあるメソッドMethodをオーバーライドすることにより、再定義することができる。これはオブジェクト指向プログラミングにおけるポリモーフィズムを実現する際によく使われる。

メソッドのオーバーロード多重定義overload)と混同されることがあるが、まったく異なる概念である。

[編集] Javaによるオーバーライドの例

public class SuperClass {
  public SuperClass(){
    System.out.println("スーパークラスのコンストラクタを実行");
  }

  public void print(){
    System.out.println("スーパークラスのインスタンスメソッドを実行");
  }

  public static void staticPrint(){
    System.out.println("スーパークラスのクラスメソッドを実行");
  }
}

public class SubClass extends SuperClass {
  public SubClass(){
    System.out.println("サブクラスのコンストラクタを実行");
  }

  //このメソッドはスーパークラスのprint()メソッドをオーバーライドしている。
  //(アノテーション @OverrideJava SE 5から追加されたもので、つけてもつけなくても良いが、
  //付けておくとメソッド名を書き間違えたときに即座に間違いに気づくことができるという利点がある。
  @Override public void print(){
    System.out.println("サブクラスのインスタンスメソッドを実行");
  }

  //スーパークラスのクラスメソッドをオーバーライドすることはできない。
  public static void staticPrint(){
    System.out.println("サブクラスのクラスメソッドを実行");
  }
}

このクラスを実行するプログラムを

class Main{
  public static void main(String[] args) {
    //クラスメソッドを実行
    SuperClass.staticPrint();
    SubClass.staticPrint();

    //インスタンスを生成
    SuperClass superTypeSubclassInstance = new SubClass();
    superTypeSubclassInstance.print();

    SubClass subClass = new SubClass();
    subClass.print();

    SuperClass superClass = new SuperClass();
    superClass.print();
  }
}

として実行すると

スーパークラスのクラスメソッドを実行
サブクラスのクラスメソッドを実行
スーパークラスのコンストラクタを実行
サブクラスのコンストラクタを実行
サブクラスのインスタンスメソッドを実行
スーパークラスのコンストラクタを実行
サブクラスのコンストラクタを実行
サブクラスのインスタンスメソッドを実行
スーパークラスのコンストラクタを実行
スーパークラスのインスタンスメソッドを実行

という結果が得られる。

最終更新 2009年9月28日 (月) 04:01 (日時は個人設定で未設定ならばUTC)。
【オーバーライド】変更履歴

ご利用上の注意