Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

  1. トップページ
  2. Java辞典
  3. extends / super / @Override

extends / super / @Override

クラスの継承とメソッドのオーバーライドに関するキーワードです。『extends』で親クラスを継承し、『super』で親クラスのメンバーにアクセスします。『@Override』アノテーションでオーバーライドを明示します。

構文
// 親クラスを継承してサブクラスを定義します。
class SubClass extends SuperClass {
    // 親クラスのフィールド・メソッドを引き継ぎます。
}

// 親クラスのコンストラクタを呼び出します(コンストラクタの先頭行)。
super(引数);

// 親クラスのメソッドを呼び出します。
super.メソッド名(引数);

// 親クラスのメソッドをオーバーライドします。
@Override
戻り値型 メソッド名(引数) {
    // サブクラス独自の処理
}
キーワード・構文一覧
キーワード概要
extends親クラス(スーパークラス)を継承してサブクラスを定義します。Javaは単一継承のため、extends できるクラスは1つのみです。
super(引数)親クラスのコンストラクタを呼び出します。サブクラスのコンストラクタの先頭行に書きます。
super.メソッド名()親クラスのメソッドを明示的に呼び出します。オーバーライドしたメソッド内から親の処理を再利用できます。
@Overrideこのメソッドが親クラスのメソッドをオーバーライドしていることをコンパイラに伝えます。スペルミスや誤ったシグネチャをコンパイル時に検出できます。
サンプルコード
// 親クラスを定義します。
class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    String speak() {
        return name + "が鳴いています。";
    }
}

// Animalを継承したDogクラスを定義します。
class Dog extends Animal {

    Dog(String name) {
        super(name); // 親クラスのコンストラクタを呼び出します。
    }

    // speak() をオーバーライドします。
    @Override
    String speak() {
        return name + "がワンと鳴いています。";
    }

    // 親クラスのメソッドを再利用します。
    String speakTwice() {
        return super.speak() + " / " + this.speak();
    }
}

Animal a = new Animal("動物");
Dog d = new Dog("ポチ");

System.out.println(a.speak());      // 『動物が鳴いています。』と出力されます。
System.out.println(d.speak());      // 『ポチがワンと鳴いています。』と出力されます。
System.out.println(d.speakTwice()); // 『ポチが鳴いています。 / ポチがワンと鳴いています。』と出力されます。

// ポリモーフィズム:親クラス型の変数にサブクラスのインスタンスを代入できます。
Animal a2 = new Dog("タロウ");
System.out.println(a2.speak()); // 『タロウがワンと鳴いています。』と出力されます。
概要

継承を使うことでコードの再利用が容易になります。サブクラスは親クラスの public / protected メンバーをそのまま使うことができ、必要に応じてオーバーライドして振る舞いを変更できます。

『@Override』アノテーションは省略可能ですが、付けておくとメソッド名のスペルミスや引数の型違いをコンパイル時に検出できるため、必ず付ける習慣をつけてください。すべてのクラスは暗黙的に Object クラスを継承しており、toString()equals() なども Object のメソッドです。

インターフェースと抽象クラスについては『interface / implements / abstract』を、アクセス修飾子については『public / private / protected / static / final』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。