این کلاسها به عنوان قالبی برای سایر کلاسها عمل میکنند و نمیتوان از آنها به طور مستقیم نمونهسازی (Instantiate) کرد.
به بیان دیگر، شما نمیتوانید یک شی مستقیم از یک کلاس انتزاعی ایجاد کنید.
هدف از کلاسهای انتزاعی، تعریف یک قرارداد برای کلاسهای وراثتی است تا اطمینان حاصل شود که تمام کلاسهای فرزند، روشهای خاصی را پیادهسازی میکنند.
کلاسهای انتزاعی اجازه میدهند تا شما یک سری از توابع (متدها) را که باید در کلاسهای فرزند پیادهسازی شوند، تعریف کنید.
مثال:
فرض کنید میخواهیم یک سیستم برای مدیریت حیوانات در یک باغ وحش ایجاد کنیم.
ما میتوانیم یک کلاس انتزاعی به نام
Animal داشته باشیم که توابع انتزاعی مانند makeSound را تعریف میکند. سپس، کلاسهای فرزند میتوانند این تابع را بر اساس نوع حیوان پیادهسازی کنند.abstract class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
// تابع انتزاعی
abstract public function makeSound();
public function getName() {
return $this->name;
}
}
class Dog extends Animal {
public function makeSound() {
return "Woof";
}
}
class Cat extends Animal {
public function makeSound() {
return "Meow";
}
}
$dog = new Dog("Sag");
echo $dog->getName() . " says " . $dog->makeSound(); // Sag says Woof
$cat = new Cat("Goorbe");
echo $cat->getName() . " says " . $cat->makeSound(); // Goorbe says Meow
در این مثال، Animal یک کلاس انتزاعی است که نمیتوان از آن نمونهسازی کرد. این کلاس یک تابع انتزاعی به نام makeSound تعریف میکند که هر کلاس فرزند باید آن را پیادهسازی کند. Dog و Cat دو کلاس فرزند هستند که از Animal ارثبری میکنند و تابع makeSound را پیادهسازی میکنند.کلاسهای انتزاعی به شما امکان میدهند تا ساختار پایهای برای کلاسهای فرزند تعریف کنید و اطمینان حاصل کنید که تمام کلاسهای فرزند، رابط کاربری مشخصی را پیادهسازی میکنند.
👤 AmirHossein
💎 Channel: @DevelopixPHP