OOP - Abstract Classes

🔹 Abstract Class چیست؟

  • یک کلاس انتزاعی (Abstract Class) کلاسیه که نمی‌شه ازش مستقیم شیء ساخت.

  • برای اینکه بگیم این کلاس فقط یه قالب کلی هست و کلاس‌های دیگه باید ازش ارث‌بری کنن.

  • می‌تونه شامل متدهای عادی و متدهای انتزاعی (abstract methods) باشه.

🔹 Abstract Method چیست؟

  • متدی که فقط تعریف شده اما بدنه نداره.

  • کلاس‌های فرزند مجبور هستن این متد رو پیاده‌سازی کنن.

🔹 تعریف Abstract Class

<?php abstract class Vehicle { // متد انتزاعی (بدون بدنه) abstract public function intro(); // متد معمولی public function category() { return "This is a vehicle."; } }

📌 نکته: اگر یک کلاس حداقل یک متد انتزاعی داشته باشه، خودش هم باید abstract باشه.

🔹 استفاده از Abstract Class

<?php abstract class Vehicle { abstract public function intro(); public function category() { return "This is a vehicle."; } } class Car extends Vehicle { public function intro() { return "I am a car!"; } } class Bike extends Vehicle { public function intro() { return "I am a bike!"; } } $car = new Car(); echo $car->intro(); // خروجی: I am a car! echo "<br>"; echo $car->category(); // خروجی: This is a vehicle. $bike = new Bike(); echo "<br>" . $bike->intro(); // خروجی: I am a bike! ?>

🔹 نکات مهم

  1. نمی‌تونیم از یک Abstract Class مستقیم شیء بسازیم:

    $v = new Vehicle(); // ❌ خطا
  2. کلاس فرزند که از Abstract Class ارث‌بری می‌کنه باید همه‌ی متدهای انتزاعی رو پیاده‌سازی کنه.

  3. Abstract Class می‌تونه متد عادی هم داشته باشه که لازم نیست در کلاس فرزند بازنویسی بشن.

✅ خلاصه

  • Abstract Class → مثل قالب یا پایه برای کلاس‌های دیگه است.

  • نمی‌شه مستقیم ازش شیء ساخت.

  • می‌تونه شامل متدهای انتزاعی (بدون بدنه) و متدهای معمولی باشه.

  • کلاس‌های فرزند باید متدهای انتزاعی رو پیاده‌سازی کنن.