本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第3章 継承 ― クラスを拡張する · レッスン7

extends の基本 ― スーパークラスとサブクラス

ブラウザで完結

導入

「学生も人間の一種」なので、人間が持つ機能(名前・自己紹介)はそのまま使いたいはずです。いちいち同じフィールドとメソッドを書き直すのは面倒ですし、修正漏れの原因にもなります。

説明

継承 を使うと、あるクラススーパークラス/親クラス)の機能を、別のクラス(サブクラス/子クラス)がそのまま引き継げます。Javaでは extends キーワードを使います。

public class Main {
    public static void main(String[] args) {
        Student s = new Student();
        s.name = "はな";
        s.introduce();
    }
}

class Person {
    String name;

    void introduce() {
        System.out.println("わたしは" + name + "です");
    }
}

class Student extends Person {
    String school;
}
classDiagram
    Person <|-- Student
    class Person {
        +String name
        +introduce()
    }
    class Student {
        +String school
    }
  • class Student extends Person { ... }StudentPerson継承 します。Person(スーパークラス)の name フィールドや introduce() メソッドを、Student(サブクラス)は自分で書かなくてもそのまま使えます。
  • Student には school という独自のフィールドも追加できます。継承は「親の機能を引き継ぎつつ、自分の機能を足す」仕組みです。

やってみよう

下のエディタを実行して、StudentPersonintroduce() をそのまま使えることを確かめましょう。Student に独自のフィールドやメソッドを追加してみてください。

演習

Vehicle(乗り物)クラスに String name フィールドと、name + "が走る" と表示する run() メソッドを持たせてください。Car extends Vehicle というクラスを作り(中身は空でよい)、mainCar のインスタンスを作って name"スポーツカー" を設定し、run() を呼んで スポーツカーが走る と表示してください。

ヒント1を見る

class Vehicle { String name; void run() { System.out.println(name + "が走る"); } }

ヒント2を見る

class Car extends Vehicle { } として、mainCar c = new Car(); c.name = "スポーツカー"; c.run();

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。