JavaA2Z

KAB-studio > プログラミング > JavaA2Z > オーバーライドとは

オーバーライド

日本語 上書き
英語 override
ふりがな おーばーらいど
フリガナ オーバーライド

解説

サブクラスメソッドの上書きをする機能。
サブクラススーパークラスと同じメソッド名、引数戻り値メソッド定義することで、スーパークラスメソッドではなく、サブクラスメソッドが呼ばれるようにする機能。
Javaでは、クラスインスタンスを作成したときに「自分が持っているメソッド」を憶えており、その際に「スーパークラスにのみ存在するメソッド」はそのまま憶え、「スーパークラスと同じメソッド(=オーバーライドしたメソッド)がある」場合にはそのメソッドを憶える。
そのため、インスタンス参照を格納しているに関わらず、メソッドは「インスタンスを作成したときに憶えたメソッド」が呼ばれる。これがオーバーライドによる「ポリモーフィズム」の実現となる。
オーバーロード」と言葉が似ているが全く異なるものなので混同しないこと。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // SubClassのインスタンスを作成し、オーバーライドされた
        // メソッドを呼び出します。
        SuperClass superClass = new SubClass();
        superClass.overridable();
        // SubClass#overridable()

        // このように、入れてる変数の型に関わらず、
        // インスタンスを作った時のクラスのメソッドが
        // 呼ばれます。

        // スーパークラスでインスタンスを作れば、
        // スーパークラスのメソッドが呼ばれるので注意。
        SuperClass superClass2 = new SuperClass();
        superClass2.overridable();
        // SuperClass#overridable()

        // APIでの例。
        Object object = new String( "A" );
        System.out.println( object.hashCode() );
        // 65
        // Object#hashCode()は「インスタンスの参照の値」を返すが、
        // String#hashCode()でオーバーライドされているため、
        // 「文字列を元にして作られたハッシュコード」が返されます。
        // オーバーライドやポリモーフィズムはJ2SE APIにも
        // 頻繁に使われているので探してみましょう(IOとか例外とか)。
    }
}

/**
*   スーパークラス。
*/
class SuperClass
{
    /**
    *   オーバーライドされるメソッド。
    */
    public void overridable()
    {
        System.out.println( "SuperClass#overridable()" );
    }
}

/**
*   サブクラス。
*/
class SubClass extends SuperClass
{
    /**
    *   オーバーライドするメソッド。
    *   メソッド名、引数、戻り値がスーパークラスのものと
    *   同じということを確認してください。
    */
    public void overridable()
    {
        System.out.println( "SubClass#overridable()" );
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // SubClassのインスタンスを作成し、オーバーライドされた
        // メソッドを呼び出します。
        SuperClass superClass = new SubClass();
        superClass.overridable();
        // SubClass#overridable()

        // このように、入れてる変数の型に関わらず、
        // インスタンスを作った時のクラスのメソッドが
        // 呼ばれます。

        // スーパークラスでインスタンスを作れば、
        // スーパークラスのメソッドが呼ばれるので注意。
        SuperClass superClass2 = new SuperClass();
        superClass2.overridable();
        // SuperClass#overridable()

        // APIでの例。
        Object object = new String( "A" );
        System.out.println( object.hashCode() );
        // 65
        // Object#hashCode()は「インスタンスの参照の値」を返すが、
        // String#hashCode()でオーバーライドされているため、
        // 「文字列を元にして作られたハッシュコード」が返されます。
        // オーバーライドやポリモーフィズムはJ2SE APIにも
        // 頻繁に使われているので探してみましょう(IOとか例外とか)。
    }
}

/**
*   スーパークラス。
*/
class SuperClass
{
    /**
    *   オーバーライドされるメソッド。
    */
    public void overridable()
    {
        System.out.println( "SuperClass#overridable()" );
    }
}

/**
*   サブクラス。
*/
class SubClass extends SuperClass
{
    /**
    *   オーバーライドするメソッド。
    *   メソッド名、引数、戻り値がスーパークラスのものと
    *   同じということを確認してください。
    */
    public void overridable()
    {
        System.out.println( "SubClass#overridable()" );
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/03/14
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。