【S4】問2解答例

<?php

/**
 * 抽象クラス
 */
abstract class Product
{
    protected int $price;

    public function __construct(int $price)
    {
        $this->price = $price;
    }

    abstract public function getPrice(): int;
}
                    
<?php

/**
 * Bookクラス
 */
class Book extends Product
{
    public function getPrice(): int
    {
        return $this->price;
    }
}
                    
<?php

/**
 * Electronicsクラス
 */
class Electronics extends Product
{
    public function getPrice(): int
    {
        return $this->price;
    }
}
                    
<?php

/**
 * DiscountedBookクラス
 */
class DiscountedBook extends Book
{
    private float $discount;

    public function __construct(int $price, float $discount)
    {
        parent::__construct($price);
        $this->discount = $discount;
    }

    public function getPrice()
    {
        return $this->price - ($this->price * $this->discount / 100);
    }
}
                    
<?php

// Book クラスを使用
$book = new Book(30);
echo '書籍の価格: $' . $book->getPrice() . PHP_EOL;

// Electronics クラスを使用
$electronic = new Electronics(500);
echo '電子機器の価格: $' . $electronic->getPrice() . PHP_EOL;

// DiscountedBook クラスを使用
$discountedBook = new DiscountedBook(40, 20);
echo '割引書籍の価格: $' . $discountedBook->getPrice() . PHP_EOL;