マンガで分かる Java入門講座

第9章 クラスとオブジェクト2
9-4. 継承3 メソッドのオーバーライド

継承したクラスのメソッドを、新しいメソッドで代替させる「オーバーライド」という仕組みを紹介します。

● メソッドのオーバーライド

 クラスを継承して、スーパークラスと同じ名前のメソッドを作ることを「オバーライド」と呼びます。

 このオーバーライドしたメソッドは、先頭に「@Override」という「アノテーション(注釈)」を付けます。

ソースコード)メソッドのオーバーライド スーパークラス src/sample/SuperClass.java
package sample;

public class SuperClass {
    public String label = "Super";

    public String getLabel() {
        return label;
    }
}

ソースコード)メソッドのオーバーライド サブクラス src/sample/SubClass.java
package sample;

public class SubClass extends SuperClass {
    public String label = "Sub";

    @Override
    public String getLabel() {
        return label;
    }
}

ソースコード)mainのあるクラス src/sample/Sample.java
package sample;

public class Sample {
    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        System.out.println(subClass.getLabel());
          // 「Sub」と出力
    }
}

● スーパークラスのメソッドの利用

 スーパークラスのメソッドを使う場合は「super.メソッド名」と書きます。

ソースコード)スーパークラスのメソッドの利用
String s = super.getLabel();

● スーパークラスのコンストラクタの利用

 スーパークラスのコンストラクタを使う場合は「super( )」と書きます。このsuper( )は、サブクラスのコンストラクタの1行目に書かなければなりません。

 そのためサブクラスのコンストラクタでは、スーパークラスの初期化が終わった上で+αの初期化を行うことになります。

ソースコード)スーパークラスのコンストラクタの利用
public SubClass() {
    super();
    System.out.println("SubClas");
}

● オーバーライドされたメソッドをスーパークラスから使った場合

 スーパークラスのメソッドAを、スーパークラスのメソッドBが使っていたとします。このメソッドAが、サブクラスでオーバーライドされた場合は、メソッドBはサブクラスのメソッドAを使うことになります。

 以下、その挙動が分かるサンプルを示します。

ソースコード)オーバーライドされたメソッドをスーパークラスから使った場合 src/sample/SuperClass.java
package sample;

public class SuperClass {
    public String label = "Super";

    public String getLabel() {
        return "Super : " + label;
    }

    public String getLabel2() {
        return getLabel();
    }
}

ソースコード)オーバーライドされたメソッドをスーパークラスから使った場合 src/sample/SubClass.java
package sample;

public class SubClass extends SuperClass {
    public String label = "Sub";

    @Override
    public String getLabel() {
        return "Sub : " + label;
    }
}

ソースコード)オーバーライドされたメソッドをスーパークラスから使った場合 src/sample/Sample.java
package sample;

public class Sample {
    public static void main(String[] args) {
        SubClass subClass = new SubClass();
        System.out.println(subClass.getLabel2());
          // 「Sub : Sub」と出力
    }
}

図)オーバーライドされたメソッドをスーパークラスから使った場合
┏SubClass━━━━━━━━━━━━━┓
┃┏SuperClass━┓         ┃
┃┃      ┃         ┃@Override
┃┃      ┠─×getLabel   ┠─○getLabel
┃┃      ┃         ┃   ↑
┃┃      ┃         ┃   │
┃┃      ┃         ┃   │
┃┃      ┃         ┃   │
┃┃      ┠───────────○getLabel2
┃┗━━━━━━┛         ┃
┗━━━━━━━━━━━━━━━━━┛

この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/06/02  更新:2015/08/09  [Permalink]