Java-オーバーライド

オーバーライド(override)とは

オーバーライドとは、スーパークラスにおいて定義されているインスタンスメソッドを、サブクラス内で再定義することを言います。

スーパークラスのメソッドを変更することはできないが、サブクラスに特化した機能を付与する必要がある場合などに使用します。

メソッド名、戻り値、引数がスーパークラスと同じである必要があります。


finalについて

メソッドにfinalキーワードを指定することで、メソッドをサブクラスからオーバーライドできないように保護できます。

複数人で開発する場合に、サブクラスで同名メソッドを実装してしまい、スーパークラスの機能を利用できないといったことを発生させないために利用します。


final void function() {}

オーバーライドのサンプル

サブクラスのprintDataメソッドを呼び出します。


// Inheritance.java

// スーパークラス
class SuperClass
{
    void printData(String data)
    {
        System.out.println("SuperClass:" + data);
    }

    void putMessage(String data)
    {
        System.out.println("SuperClass:" + data);
    }
}

// 継承(サブ)クラス
class SubClass extends SuperClass
{
    void printData(String data)
    {
        System.out.println("SubClass:" + data);
    }

   // putMessage()はオーバーライドしない
}

class Inheritance
{
    public static void main(String[] args)
    {
        SubClass ref = new SubClass();

        ref.printData("Override");
        ref.putMessage("Not override");
    }
}

Overrideアノテーション

Overrideアノテーションは、基底クラスのメソッドを継承していることを示します。

つまり、そのメソッドがスーパークラスのメソッドをオーバーライドしていることを示します。

メソッドのオーバーライドの記述ミスなど、開発者の不本意のミスを確実に防ぐためにアノテーションを記述します。

ソースコードの保守性を向上させるためにも、オーバーライド実施時には記述したほうがよいといえます。


// 継承(サブ)クラス
class SubClass extends SuperClass
{
    @Override
    void printData(String data)
    {   
        System.out.println("SubClass:" + data);
    }
}

関連ページ