オーバーライド
出典: フリー百科事典『ウィキペディア(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 ■インスタンスのメソッドを呼び出し (Base型変数中のDerivedインスタンス) Base: Base Derived: Derived Derived: print //オーバライド ■クラスメソッドを実行 (Base) Base: staticPrint ■クラスメソッドを実行 (Derived) Derived: staticPrint
という結果が得られる。