オーバーライド
出典: フリー百科事典『ウィキペディア(Wikipedia)』
オブジェクト指向プログラミングにおいて、あるクラスAにメソッドmethod()があるとき、あるクラスSubAがクラスAを継承したとする。そのとき、クラスSubAはクラスSubAのスーパークラスであるクラスAにあるメソッドmethod()を自分のクラスSubA内で再定義したい。そのとき、サブクラスであるクラスSubAでもクラスSubAのスーパークラスであるクラスAと同じ名前のメソッドを定義する。これをメソッドのオーバーライド(override)と呼ぶ。これはオブジェクト指向プログラミングにおけるポリモーフィズムを実現する際によく使われる。
よく、メソッドのオーバーロード(多重定義、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()メソッドをオーバーライドしている。
//(アノテーション @Override
はJava 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(); } }
として実行すると
スーパークラスのクラススメソッドを実行 サブクラスのクラススメソッドを実行 スーパークラスのコンストラクタを実行 サブクラスのコンストラクタを実行 サブクラスのインスタンスメソッドを実行 スーパークラスのコンストラクタを実行 サブクラスのコンストラクタを実行 サブクラスのインスタンスメソッドを実行 スーパークラスのコンストラクタを実行 スーパークラスのインスタンスメソッドを実行
という結果を得られる。