オーバーライド

出典: フリー百科事典『ウィキペディア(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

という結果が得られる。

関連項目[編集]