JavaScript Class: Intermediate (ক্লাস)
extends, super, override, method overloading ধারণা, static, private field (#), getter/setter, instanceof — বাংলায়।
এবার class-কে দিয়ে inheritance, static, encapsulation — OOP-এর মাঝামাঝি ধাপের বিষয়গুলো।
extends — উত্তরাধিকার (Inheritance)
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} শব্দ করছে`;
}
}
class Dog extends Animal {
fetch() {
return `${this.name} বল আনছে`;
}
}
const dog = new Dog("টমি");
console.log(dog.speak()); // টমি শব্দ করছে (parent class থেকে)
console.log(dog.fetch()); // টমি বল আনছে (নিজের মেথড)extends দিয়ে child class parent-এর সব property ও method পায় — নিজেও নতুন মেথড যোগ করতে পারে। এটাই code reuse-এর প্রধান কৌশল।
super — parent-কে ডাকা
class Vehicle {
constructor(brand) {
this.brand = brand;
}
}
class Car extends Vehicle {
constructor(brand, model) {
super(brand); // parent-এর constructor চালায়
this.model = model;
}
}
const car = new Car("Toyota", "Corolla");
console.log(car.brand); // Toyota
console.log(car.model); // Corollasuper(...) constructor/মেথড-এ parent-কে ডাকতে হয় — constructor-এ `this` ব্যবহারের আগেই super() দিতে হবে, নাহলে error।
Method override
class Animal {
speak() {
return "কিছু শব্দ";
}
}
class Dog extends Animal {
speak() {
return super.speak() + " — ঘেউ ঘেউ";
}
}
const dog = new Dog();
console.log(dog.speak()); // কিছু শব্দ — ঘেউ ঘেউchild class-এ একই নামের method লিখলে সেটি parent-এর version override করে — চাইলে super.speak() দিয়ে parent-এর version-ও ব্যবহার করা যায়।
Static property/method
class MathHelper {
static pi = 3.1416;
static square(n) {
return n * n;
}
}
console.log(MathHelper.pi); // 3.1416
console.log(MathHelper.square(5)); // 25
// instance নয় — সরাসরি class-এ কল হয়
const helper = new MathHelper();
console.log(helper.square); // undefinedstatic-এর property/method instance-ভিত্তিক নয় — class-এর সাথেই থাকে। ইউটিলিটি helper-র জন্য উপযুক্ত।
Private field (#)
class BankAccount {
#balance; // private — বাইরে থেকে দেখা যাবে না
constructor(initial) {
this.#balance = initial;
}
deposit(amount) {
this.#balance += amount;
}
getBalance() {
return this.#balance;
}
}
const acc = new BankAccount(1000);
acc.deposit(500);
console.log(acc.getBalance()); // 1500
// console.log(acc.#balance); // SyntaxError — private!# দিয়ে private — property/মেথড শুধু class-এর ভেতরেই অ্যাক্সেসযোগ্য। বাইরের code সরাসরি বদলাতে পারবে না — এটাই encapsulation।
Getter ও Setter
class User {
constructor(first, last) {
this.first = first;
this.last = last;
}
get fullName() {
return `${this.first} ${this.last}`;
}
set fullName(value) {
[this.first, this.last] = value.split(" ");
}
}
const user = new User("আনামুল", "হাসান");
console.log(user.fullName); // "আনামুল হাসান" (property-র মতো)
user.fullName = "প্রিয়াঞ্জলী দাস";
console.log(user.first); // প্রিয়াঞ্জলীinstanceof
class Animal {}
class Dog extends Animal {}
const dog = new Dog();
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true (parent-ও)
console.log(dog instanceof Object); // true| কৌশল | কাজ |
|---|---|
| extends | child-কে parent-এর property/method দেয় |
| super | parent-এর constructor/method ডাকায় |
| override | child-এ একই নামের method পুনরায় লেখা |
| static | class-এর সাথে থাকা (instance ছাড়া) |
#private | encapsulation — class-এর ভেতরেই সীমাবদ্ধ |
| get/set | property-র মতো access-use করা method |
| instanceof | class-এর instance যাচাই |
subclass-এর constructor-এ this ব্যবহারের আগে অবশ্যই super() ডাকা লাগবে — নাহলে ReferenceError।