TypeScript এ ইনহেরিটেন্স (inheritance) এর মাধ্যমে একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্য এবং মেথড গ্রহণ করতে পারে। এটি object-oriented programming (OOP) এর একটি মৌলিক ধারণা যা কোড পুনরায় ব্যবহারযোগ্য এবং একাধিক ক্লাসের মধ্যে সম্পর্ক তৈরি করে।
TypeScript এ ইনহেরিটেন্সে extends কীওয়ার্ড ব্যবহার করা হয়। এটি ব্যবহার করে আপনি একটি ক্লাসের সমস্ত বৈশিষ্ট্য (properties) এবং পদ্ধতি (methods) অন্য একটি ক্লাসে উত্তরাধিকার (inherit) করতে পারেন।
১. ক্লাস এবং ইনহেরিটেন্সের ধারণা
একটি ক্লাসের বৈশিষ্ট্য এবং মেথডকে অন্য একটি ক্লাসে উত্তরাধিকারী করে নিতে, আপনি extends কীওয়ার্ড ব্যবহার করতে পারেন।
উদাহরণ:
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound(): void {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name); // Animal ক্লাসের constructor কল করা হচ্ছে
this.breed = breed;
}
bark(): void {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog("Buddy", "Golden Retriever");
dog.makeSound(); // Animal ক্লাসের মেথড
dog.bark(); // Dog ক্লাসের মেথড
এখানে:
Dogক্লাসটিAnimalক্লাস থেকে ইনহেরিট করেছে, অর্থাৎDogক্লাসAnimalক্লাসের সমস্ত বৈশিষ্ট্য এবং মেথড গ্রহণ করেছে।super()ব্যবহার করে প্যারেন্ট ক্লাস (এখানেAnimal) এর কনস্ট্রাক্টর কল করা হয়েছে।Dogক্লাসে নতুন একটি মেথডbark()যোগ করা হয়েছে যাAnimalক্লাসে নেই।
২. super() কীওয়ার্ড
super() কীওয়ার্ডটি প্যারেন্ট ক্লাসের কনস্ট্রাক্টর এবং মেথডকে কল করার জন্য ব্যবহৃত হয়। যখন একটি ক্লাস অন্য ক্লাসকে extends করে, তখন প্যারেন্ট ক্লাসের কনস্ট্রাক্টরকে কল করার জন্য super() ব্যবহার করা হয়।
উদাহরণ:
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
greet(): void {
console.log(`Hello, ${this.name}`);
}
}
class Employee extends Person {
position: string;
constructor(name: string, position: string) {
super(name); // Person ক্লাসের কনস্ট্রাক্টর কল
this.position = position;
}
work(): void {
console.log(`${this.name} is working as a ${this.position}.`);
}
}
const employee = new Employee("John", "Developer");
employee.greet(); // Person ক্লাসের মেথড
employee.work(); // Employee ক্লাসের মেথড
এখানে:
Employeeক্লাসPersonক্লাস থেকে ইনহেরিট করেছে।super(name)ব্যবহার করেPersonক্লাসের কনস্ট্রাক্টর কল করা হয়েছে।
৩. সুপার ক্লাসের মেথড এবং প্রপার্টি অ্যাক্সেস
ইনহেরিটেন্স ব্যবহারের সময়, আপনি প্যারেন্ট ক্লাসের মেথড এবং প্রপার্টি সিবলিং ক্লাসে অ্যাক্সেস করতে পারেন। তবে, কখনও কখনও আপনি প্যারেন্ট ক্লাসের মেথড বা প্রপার্টি মডিফাই করতে চাইলে super কীওয়ার্ড ব্যবহার করতে পারেন।
উদাহরণ:
class Car {
brand: string;
constructor(brand: string) {
this.brand = brand;
}
drive(): void {
console.log(`${this.brand} car is driving.`);
}
}
class ElectricCar extends Car {
batteryLife: number;
constructor(brand: string, batteryLife: number) {
super(brand); // Car ক্লাসের কনস্ট্রাক্টর কল
this.batteryLife = batteryLife;
}
drive(): void {
console.log(`${this.brand} electric car is driving silently.`);
}
checkBattery(): void {
console.log(`Battery life: ${this.batteryLife} hours.`);
}
}
const tesla = new ElectricCar("Tesla", 12);
tesla.drive(); // ElectricCar ক্লাসের মেথড
tesla.checkBattery(); // ElectricCar ক্লাসের নতুন মেথড
এখানে:
ElectricCarক্লাসটিCarক্লাস থেকে ইনহেরিট করেছে।ElectricCarক্লাসেরdrive()মেথডCarক্লাসেরdrive()মেথডকে ওভাররাইড করেছে (Method Overriding)।checkBattery()একটি নতুন মেথড যাElectricCarক্লাসে যোগ করা হয়েছে।
৪. মেথড ওভাররাইডিং (Method Overriding)
TypeScript এ আপনি প্যারেন্ট ক্লাসের মেথডকে কনটেক্সটের ভিত্তিতে কাস্টমাইজ করতে পারেন। এটি মেথড ওভাররাইডিং বলে পরিচিত।
উদাহরণ:
class Animal {
sound(): void {
console.log("Some generic animal sound");
}
}
class Cat extends Animal {
sound(): void {
console.log("Meow");
}
}
const cat = new Cat();
cat.sound(); // "Meow"
এখানে, Cat ক্লাসে sound() মেথডটি Animal ক্লাসের sound() মেথডকে ওভাররাইড করেছে।
৫. মাল্টিপল ইনহেরিটেন্স (Multiple Inheritance)
TypeScript সরাসরি মাল্টিপল ইনহেরিটেন্স সমর্থন করে না (যেখানে একাধিক ক্লাস একসাথে ইনহেরিট করতে পারে)। তবে আপনি ইন্টারফেস ব্যবহার করে একাধিক ইনহেরিটেন্স সিমুলেট করতে পারেন।
উদাহরণ:
interface Flyer {
fly(): void;
}
interface Swimmer {
swim(): void;
}
class Duck implements Flyer, Swimmer {
fly(): void {
console.log("Duck is flying");
}
swim(): void {
console.log("Duck is swimming");
}
}
const duck = new Duck();
duck.fly(); // Duck is flying
duck.swim(); // Duck is swimming
এখানে, Duck ক্লাস দুটি ইন্টারফেস Flyer এবং Swimmer কে ইমপ্লিমেন্ট করেছে, যা মাল্টিপল ইনহেরিটেন্সের মতো কাজ করছে।
সারাংশ
extendsকীওয়ার্ড ব্যবহার করে একটি ক্লাস অন্য একটি ক্লাস থেকে ইনহেরিট করতে পারে।super()প্যারেন্ট ক্লাসের কনস্ট্রাক্টর বা মেথড কল করতে ব্যবহৃত হয়।- মেথড ওভাররাইডিং এবং ইন্টারফেস TypeScript এ ইনহেরিটেন্সের শক্তিশালী ফিচার।
Read more