オーバーライド
出典: フリー百科事典『ウィキペディア(Wikipedia)』
オブジェクト指向プログラミングにおいてオーバーライド (override)とは、スーパークラスで定義されたメソッドをサブクラスで定義しなおし、動作を上書きすることである。
あるクラスBaseにメソッドprintがあり、あるクラスDerivedがクラスBaseを継承したとする。そのとき、クラスDerivedはクラスBaseにあるメソッドprintをオーバーライドすることにより、再定義することができる。これはオブジェクト指向プログラミングにおけるポリモーフィズムを実現する際によく使われる。
メソッドのオーバーロード(多重定義、overload)と混同されることがあるが、まったく異なる概念である。
[編集] Java言語によるオーバーライドの例
class Base
{
// コンストラクター
Base ()
{System.out .println ("Base: Base") ;}
// インスタンスメソッド
void print ()
{System.out .println ("Base: print") ;}
// クラスメソッド
static void staticPrint()
{System.out .println ("Base: staticPrint") ;}
}
class Derived extends Base
{
// コンストラクター
Derived ()
{System.out .println ("Derived: Derived") ;}
// スーパークラス の インスタンスメソッド print をオーバーライドしている。
void print ()
{System.out .println ("Derived: print") ;}
// スーパークラス の クラスメソッド staticPrint をオーバーライドすることはできない。
static void staticPrint ()
{System.out .println ("Derived: staticPrint") ;}
}
このクラスを実行するプログラムを
public class Main
{
public static void main (String [] args)
{
System.out .println ("■インスタンスのメソッドを呼び出し (Baseインスタンス)") ;
Base base = new Base () ;
base .print () ;
System.out .println ("■インスタンスのメソッドを呼び出し (Derivedインスタンス)") ;
Derived derived = new Derived () ;
derived .print () ;
System.out .println ("■インスタンスのメソッドを呼び出し (Base型変数中のDerivedインスタンス)") ;
Base derivedInBaseVariable = new Derived () ;
derivedInBaseVariable .print () ;
System.out .println ("■クラスメソッドを実行 (Base)") ;
Base.staticPrint () ;
System.out .println ("■クラスメソッドを実行 (Derived)") ;
Derived.staticPrint () ;
}
}
として実行すると
■インスタンスのメソッドを呼び出し (Baseインスタンス) Base: Base Base: print ■インスタンスのメソッドを呼び出し (Derivedインスタンス) Base: Base Derived: Derived Derived: print ■インスタンスのメソッドを呼び出し (Derived型変数中のDerivedインスタンス) Base: Base Derived: Derived Derived: print //オーバライド ■クラスメソッドを実行 (Base) Base: staticPrint ■クラスメソッドを実行 (Derived) Derived: staticPrint
という結果が得られる。