1. Animal を継承した Dog クラスを作り、Dog.bark() の戻り値 "Wan!" を返す
コース一覧
Java 中級:コレクション・Stream・例外処理
extends で継承する

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

extends で継承する

同じメソッドを、クラスの数だけ書き写している

自転車のクラスにも自動車のクラスにも start() と stop() を書き、あとから「停止するときにログを残したい」となったとき、すべてのクラスを開いて同じ修正を入れることになります。クラスが 3 つなら 3 か所、10 個なら 10 か所です。

共通の部分だけを 1 つのクラスに追い出して、残りのクラスがそれを引き継ぐ。この仕組みが 継承 です。オブジェクト指向の三大要素はカプセル化・継承・ポリモーフィズムの 3 つで、カプセル化は前のコースで済んでいます。この章では残りの 2 つを順に扱います。

extends と書くと、親の中身が流れ込む

親を指定するのは、クラス名のうしろに extends 親クラス名 と書くだけです。

Java

class Vehicle { public String start() { return "発進します"; } } class Bicycle extends Vehicle { public String ringBell() { return "チリンチリン"; } }

Bicycle の中身は ringBell() だけですが、次の 2 行はどちらも動きます。

Java

Bicycle b = new Bicycle(); System.out.println(b.start()); // 発進します。Vehicle から引き継いだ System.out.println(b.ringBell()); // チリンチリン。自分で書いた

extends Vehicle と書いた時点で、Vehicle の public と protected のメンバーが Bicycle からも呼べるようになります。private なものだけは引き継がれず、親の内部からしか触れません。

親を書き換えれば、子はそろって新しい振る舞いになります。最初に挙げた「10 か所を直す」問題が、1 か所で済むようになるということです。

「持っている」を継承で書かない

継承を使ってよいかは、「子は親の一種である」と日本語にして不自然でないか で決まります。

  • 自転車は乗り物の一種である → 自然なので Bicycle extends Vehicle でよい
  • 自動車はエンジンの一種である → 不自然。車はエンジンを 持っている だけなので、Engine はフィールドとして持たせる

「持っている」を継承で表すと、子クラスに関係のないメソッドがぞろぞろ生えて、あとから外せなくなります。フィールドを 1 つ増やしたいだけなら、それは継承ではありません。

なお親にできるクラスは 1 つだけで、extends A, B とは書けません。extends を書かないクラスも、実は自動的に Object を継承しています。どんなクラスでも toString() が呼べるのはそのためです。

やってみよう

dogBark() を完成させてください。作るクラスは 2 つです。

  1. 親になる Animal クラスを用意する。共通の振る舞いを 1 つ持たせておけば十分です
  2. Animal を extends した Dog クラスを作り、public String bark() を持たせる
  3. bark() は "Wan!" を返す
  4. dogBark() の中で Dog のインスタンスを作り、bark() の結果をそのまま返す

dogBark() の中でいきなり return "Wan!"; と書いてもテストは通ってしまいますが、それでは継承を 1 文字も使っていません。必ず Dog extends Animal の形を作り、そのインスタンス経由で呼んでください。

判定は完全一致です。"wan!" のように小文字で始めたり、末尾の ! を落としたりすると通りません。

要件

  1. 親クラス Animal と、それを extends した子クラス Dog の 2 つを定義すること
  2. Dog クラスに public String bark() メソッドを実装し、"Wan!" を返すこと
  3. Solution.dogBark() の中で new Dog() してから bark() を呼び、その結果をそのまま return すること

入出力例

dogBark() → "Wan!"

ヒント

クラスを継承する文法は `class 子 extends 親 { ... }` です。`implements` ではなく `extends` を使います

Java の単一継承では親クラスは 1 つだけしか書けません。今回も `extends Animal` のみで十分です

戻り値は `"Wan!"` (W は大文字、末尾に半角ビックリマーク) です。`"wan!"` や `"Wan"` では test_cases が fail します

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • super で親を呼ぶ

    子クラスから親クラスのメソッドやコンストラクタを呼ぶときに使う `super` キーワードの意味と使い方を、`greet` メソッドのオーバーライド例を通して身につけよう。

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

    親クラスのメソッドを子クラスで上書きするオーバーライドの仕組みを学び、Shape を継承した Circle で area() を再定義してみよう。

  • abstract で抽象クラス

    Java の `abstract` キーワードで抽象クラスと抽象メソッドを定義し、`Shape` を継承した `Triangle` で三角形の面積を求めるコードを書いてみよう。

  • interface で契約を定義

    Java の interface を使って「契約」だけを定義し、implements で複数のクラスに同じ振る舞いを約束させる方法を学ぼう。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • メソッドクラスに属する関数
  • クラスデータと振る舞いを束ねる単位
  • 継承親クラスの機能を子クラスへ引き継ぐ仕組み
  • オブジェクトキーと値のペアで構造を作るデータ
  • カプセル化フィールドを private にし getter/setter で守る設計
  • ポリモーフィズム同名メソッドが型ごとに振る舞いを変える性質
  • フィールドクラスが持つデータ
  • インスタンスクラスから生成された実体
main.java
学習モード
エディタを読み込んでいます

メモ

extends で継承する

⌘S で保存