- Javaの最重要ワード「extends(継承)」の正体を完璧に理解する
- なぜextendsが必要なのか、その圧倒的なメリットを理解する
- extendsに関する英語フレーズを習得する
どうも上達の研究家のワタタクです。
Javaの勉強を進めていると、クラス名の後ろに急にくっついてくるこの言葉。
public class SuperParticle extends Particle { ... }
参考書を開くと、「継承とは、既存のクラスの属性とメソッドを子クラスに引き継ぎ…」なんてフリーズ必須の解説が書かれていますが、中身はめちゃくちゃシンプルです!
今回も僕たちの日常にある「あるもの」に例えて、小学生でも一発で納得できるようにバラバラに解体(デバッグ)していきましょう!
この記事を書いた人


上達の研究家 / アーティスト
「才能」ではなく「発見」で描く。文系・36歳からの上達ハック。
- ゼロから独学でクリエイティブコーディングに挑戦し、以下の実績を達成
- 開始1年8ヶ月目までに公募6つに挑戦し、3つ入選(勝率50%)
- KITTE大阪の18メートルあるAxCROSS大型スクリーン
- 虎ノ門ヒルズステーションタワーB2F TOKYO NODE エントランスサイネージで展示
- UN:O(東京大手町)にある会員限定のサテライトオフィスにて2作品常設展示
- 開始1年8ヶ月目までに公募6つに挑戦し、3つ入選(勝率50%)
- 開始1年9ヶ月目に、虎ノ門ヒルズ49階、地上250mのインフィニティプールへ作品提供・展示
- 実際の展示作品と動画、音楽やSEOでの実績はポートフォリオに載せております→https://my-portfolio-blue-three-63.vercel.app/works
「extends」って、一言でいうとナニ?
extendsを一言でいうと、「すでにあるプログラム(元の形)をそのままコピーして、新しい機能を追加した『パワーアップ版プログラム』を作るための魔法の言葉」です!
英語の extends には「広げる」「拡張する」という意味があります。 プログラミングの世界では、この仕組みのことを難しい言葉で「継承(けいしょう)」と呼んでいます。
「たいやき」の型で考えてみよう!
あなたが「たいやき屋さん」を開くとして、普通のたいやき(あんこ入り)を作るプログラムを作ったとします。 商売が繁盛したので、新メニューとして「チョコたいやき」と「カスタードたいやき」も作りたくなりました。
もし extends を知らないと、あなたは「チョコ用」と「カスタード用」のプログラムを、またゼロから全く同じように書き直さなければいけません。これはめんどくさいですし、コードが散らかる原因になります。
そこで extends の出番です!
「新メニューの『チョコたいやき』は、普通のたいやきを extends(拡張) して作ります!」
こう宣言するだけで、普通のたいやきの「形(生地の焼き方やサイズ)」をそのまま一瞬でコピー(型抜き)して、中身を「チョコ」に変えるだけの最小限のコードで、新しいプログラムを爆速で作ることができるのです。
実際のコードで見るextendsのビフォーアフター
これまでのマトリョーシカ構造(関連記事:Javaの正体は「マトリョーシカ構造の本」?パッケージ・クラス・メソッドの入れ子関係を徹底図解!)を思い出してください。パッケージ(大箱) ➔ クラス(中箱)の中に、この上下関係が作られます。
① 元になる普通のプログラム(親クラス)
画面につぶつぶ(Particle)を描いて動かす、基本の Particle クラスです。
public class Particle {
int x, y;
public void move() {
// まっすぐ動く処理
}
}② パワーアップさせたプログラム(子クラス)
元の Particle の機能をすべて引き継いだまま、新しく「キラキラ光る(flash)」という機能をプラスした NeonParticle を作ります。ここで extends を使います!
// Particleをベースにしてパワーアップさせるぞ!という宣言
public class NeonParticle extends Particle {
// xやy、move()のコードは書かなくても自動でコピーされている!
public void flash() {
// ピカッと光る新しい処理(追加機能)
}
}なんと、新しく追加したい flash() メソッドを書くだけで完了です!元のプログラムに書いてあった x や y や move() は、裏側で自動的に引き継がれているため、書く必要がありません。コードが劇的にスッキリしますよね。
extendsを使ったコードで出てきた親クラスと子クラスの別の呼び方
親クラスをスーパークラス。
子クラスをサブクラスとも言います。
extendsの英会話の例
海外のテック企業では、この extends の関係性のことを「親子」ではなく、「Super(上司・元)」と「Sub(部下・下位)」という言葉を使うみたいです。
1. 機能を拡張して新しいクラスを作りたいとき
A:基本のボタンクラスをベースにして、新しく「光るボタン」を作りたいんだけど。
B:じゃあ、元のボタンクラスをインポートして、それをextendsして新しいクラスを作ろう。
A: I want to create a “GlowButton” based on the basic button class.
B: Then, let’s import the original button class and extend it to make the new one.
2. 親クラス(元)を指すとき
A:NeonParticle の元になっているクラスってどれだっけ?
B:そのスーパークラス(親クラス)は Particle だよ
A: Which class is the base for “NeonParticle”?
B: Its superclass is the “Particle” class.
3. 子クラス(拡張版)を指すとき
A:この新しい機能を実装するために、サブクラス(子クラス)を新しく作るべきだね。
A : We should create a new subclass to implement this feature.
まとめ:楽をして安全に作るための「思いやり」
最後に、今回の脳内マッピングのおさらいです!
- extends(継承): 元のプログラムをコピーしてパワーアップさせる魔法の呪文。
- スーパークラス(親): ベースになる元のプログラム。
- サブクラス(子): extendsして新しく作った拡張版プログラム。
プログラミングのルールって、一見難しそうですが、その本質は「過去の自分が頑張って作ったコード(たいやきの型)を無駄にせず、楽をして安全に次の作品を作るため」の、エンジニアたちの優しい知恵なんですね。
それでは今日もレッツワクワクコーディング。



