親クラスが持っているメソッド、プロパティを子クラスに引き継がせること
えっと、
何言ってんの?
専門用語が多すぎて何を言っているのかわからないので、全部絵で表してみたいと思います!
継承は絵で見るとこんなイメージ!
「クラス」は何かを作る時の設計図です。
(クラスとは?という方はこちらをご覧ください!)
例えば、以下のように、
- 車を作るならCarクラス
- トラックを作るならTruckクラス
- バイクを作るならBikeクラス
クラスという設計図を一回作っておけば、次からはそのクラス(設計図)をもとに何台でも車を作成する事ができます。
しかし、、↓
できること:「走る、止まる、クラクションを鳴らす、曲がる」
情報:「ナンバー、ガソリンの量、名前」
これらの乗り物は「できること」も「情報」もほとんど同じ
継承のメリット
継承を使うポイントは、
「普通自動車もトラックもバイクも」できることがほとんど同じという点です。
それぞれのクラスを作っても良いのですが、中身がほとんど同じなら無駄が発生します。
そこで、次のように「乗り物」という大きな意味を持つクラスを作ります。
この「乗り物」クラスには、全ての乗り物に共通する最低限の情報のみを記載しておきます。
例えば、飛行機のように「飛べる」という内容は「乗り物」クラスには書かないようにします。
こうする事で、普通自動車もトラックもバイクも同じように、
- 乗り物クラスを使って、まず乗り物という大枠を作る
- 後は、足りない機能だけ追加すれば良い
ここでもし、「乗り物」クラスに「飛べる」という内容が書いてあったら、
「乗り物」クラスを参考にしている、普通自動車もトラックもバイクも同じように飛ぶことができてしまいます。
ちなみに、
①の「乗り物」クラスを参考にすることを「乗り物クラスを継承する」と言います。
コードでイメージしてみる
今の話をPHPのコードで書いてみましょう。
生き物(Creature)クラスを作ってみます。
<?php
class Creature {
// メソッド
function walk() {
echo '歩いています';
}
function speak() {
echo 'しゃべっています';
}
}
これで、人間でも犬でも鳥でも生き物であればなんでも作ることができます。
では、このクラスを継承して人間を作ってみましょう。
継承の書き方は以下のようになります。
class Human extends Creature {
}
- Humanクラスを作成しよう(class Human)
- あ、そうだ。Creatureを継承しよう(class Human extends Creature)
という流れです。
PHPのコードではこんな感じになります。
<?php
class Creature {
// メソッド
function walk() {
echo '歩いています';
}
function speak() {
echo 'しゃべっています';
}
}
class Human extends Creature {
}
面白いことに、Humanクラスの中には何も書いてないですが、
Creatureを継承しているので、walkメソッドとspeakメソッドの2つを使うことができます。
試しに、空のHumanクラスをインスタンス化して、walkメソッドを実行してみてください。
<?php
class Creature {
function walk() {
echo '歩いています';
}
function speak() {
echo 'しゃべっています';
}
}
class Human extends Creature {
}
$tom = new Human();
$tom->walk();
画面を更新すると、「歩いています」が表示されます。
クラスをインスタンス化する方法は、こちらをご覧ください!
まとめ
- 継承の元になるクラスを「親クラス、またはスーパークラス」と言う(今回だと乗り物や生き物)
- 継承先となるクラスを「子クラス、またはサブクラス」と言う(今回だとトラックやバイク、tom)
- コードで書くと、「class クラス名 extends 親クラス { }」