Inheritance (উত্তরাধিকার)

লেসন ৫ / ৩৯

Inheritance কী?

Inheritance মানে একটি class অন্য class থেকে properties ও methods উত্তরাধিকার সূত্রে পায়। extends কীওয়ার্ড ব্যবহৃত হয়।

  • Parent Class (Base/Super class) — যে class থেকে নেওয়া হয়
  • Child Class (Derived/Sub class) — যে class নেয়

মৌলিক উদাহরণ

// Parent Class
class Animal {
    public $name;

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

    public function eat() {
        echo "{$this->name} খাচ্ছে\n";
    }

    public function sleep() {
        echo "{$this->name} ঘুমাচ্ছে\n";
    }
}

// Child Class
class Dog extends Animal {
    public function bark() {
        echo "{$this->name} ঘেউ ঘেউ করছে\n";
    }
}

class Cat extends Animal {
    public function meow() {
        echo "{$this->name} মিউ মিউ করছে\n";
    }
}

$dog = new Dog("টমি");
$dog->eat();    // ✅ Parent থেকে পাওয়া
$dog->sleep();  // ✅ Parent থেকে
$dog->bark();   // ✅ নিজস্ব

$cat = new Cat("মিনি");
$cat->meow();

Method Override

Child class parent-এর method-কে নতুন করে লিখতে পারে।

class Animal {
    public function sound() {
        echo "কোনো শব্দ\n";
    }
}

class Dog extends Animal {
    // Override
    public function sound() {
        echo "ঘেউ ঘেউ\n";
    }
}

class Cow extends Animal {
    public function sound() {
        echo "হাম্বা\n";
    }
}

$d = new Dog();
$d->sound();   // ঘেউ ঘেউ

$c = new Cow();
$c->sound();   // হাম্বা

parent:: কীওয়ার্ড

Child class থেকে parent-এর method কল করতে parent:: ব্যবহার হয়।

class Vehicle {
    public $brand;

    public function __construct($brand) {
        $this->brand = $brand;
        echo "Vehicle তৈরি: {$brand}\n";
    }

    public function info() {
        echo "ব্র্যান্ড: {$this->brand}\n";
    }
}

class Car extends Vehicle {
    public $model;

    public function __construct($brand, $model) {
        parent::__construct($brand);  // parent-এর constructor কল
        $this->model = $model;
    }

    public function info() {
        parent::info();  // parent-এর info() কল
        echo "মডেল: {$this->model}\n";
    }
}

$car = new Car("Toyota", "Corolla");
$car->info();
// ব্র্যান্ড: Toyota
// মডেল: Corolla

Multi-level Inheritance

class A {
    public function hello() { echo "A\n"; }
}

class B extends A {
    public function greet() { echo "B\n"; }
}

class C extends B {
    public function wave() { echo "C\n"; }
}

$c = new C();
$c->hello();  // ✅ (A থেকে)
$c->greet();  // ✅ (B থেকে)
$c->wave();   // ✅ (নিজের)

Final Class ও Final Method

// এই class-কে extend করা যাবে না
final class Singleton {
    // ...
}

class Base {
    // এই method override করা যাবে না
    final public function critical() {
        echo "কেউ override পারবে না\n";
    }
}
⚠️ PHP multiple inheritance (একাধিক parent) সরাসরি সাপোর্ট করে না। তার বদলে Interface ও Trait ব্যবহৃত হয়।