見出し画像

8day

抽象クラス継承

◇抽象クラス◇
時計 → 「デジタル時計」「アナログ時計」
2つの共通概念と表示方式の違いは。抽象クラスと継承を使用すればうまく表現することができる。
● 抽象クラス ●
実態をもたない概念 → インスタンス化して利用することができない。
引数と戻り値のみを持つ → 中身を持たない抽象メソッドを持つことができる。 「時間を示す」など
時計
#現在時刻
∔時間をセット
∔時間を取得
∔時間を示す
↗        ⇖
デジタル時計    アナログ時計
∔時間を示す    ∔時間を示す

クラス定義 → abstract キーワード

abstract class Clock
{
	// ここに、プロパティとメソッドを記入
}

インスタンス化はできない
$clock = new Clock( ) // err になる

抽象メソッドを定義するとき → abstract キーワード

abstract class Clock
{
	abstract public function show();
}

抽象メソッドは中身の処理をもたないの → 行末をセミコロンで終わらして宣言。

declare(strict_types=1);

// 抽象メソッド
abstract class Clock
{
// 現在時刻(サブクラスまで適用させる)
    protected $time;
    
    abstract public function show() : string;

    public function setTime(int $time) : void
    {
        $this->time = $time;
    }

    public function getTime() : string
    {
        return $this->time;
    }
}

抽象メソッド → show()
サブクラスで必ずその中身のプログラム処理を実装しなければならない。
通常メソッド → setTime()、getTime()
中身のプログラム処理をそのまま、サブクラスに引き継ぐことがきる。
◇スーパークラスを継承する extends◇
時計クラスを継承したサブクラスを作るには → extends

class DigitalClock extends Clock 
{
	// ここにプロパティとメソッド記述
}

スーパークラスが持つ通常のプロパティとメソッドは、アクセス修飾子がprivateでない限り、自動的にサブらクラスに継承される。
スーパークラスが持つ抽象メソッドは、同じ引数と戻り値で、サブクラス側でも必ず実装しないといけない。

サブクラスは2つ以上の親を同時に持つことができない。
複数のスーパークラスを同時に継承することを多重継承 → エラー(複数の改装に分けて継承することは可能)


ーーーーコメントーーーー

すすまず。。。。
やっとかっと継承か。。。

この記事が気に入ったらサポートをしてみませんか?