đļ Polymorphism (āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāĻāĻŽ)
đ āϏāĻāĻā§āĻāĻž:
Polymorphism āĻŽāĻžāύ⧠āĻšāϞ⧠âāĻāĻāĻ āĻāύā§āĻāĻžāϰāĻĢā§āϏ, āĻāĻŋāύā§āύ āĻāĻāϰāĻŖâāĨ¤ āĻ āϰā§āĻĨāĻžā§, āĻāĻāĻāĻŋ āĻŦā§āϏ āĻā§āϞāĻžāϏ āĻĨā§āĻā§ āĻŦāĻŋāĻāĻŋāύā§āύ āϏāĻžāĻŦāĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰ⧠āĻāĻāĻ āĻŽā§āĻĨāĻĄ āĻāĻŋāύā§āύāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
âī¸ āĻāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ?
- āϝāĻāύ āĻāĻŽāϰāĻž āĻāĻžāĻ, āĻāĻāĻāĻžāĻ āĻĢāĻžāĻāĻļāύ āĻŦāĻž āĻŽā§āĻĨāĻĄ āĻāϞ āĻāϰāϞā§āĻ context āĻ āύā§āϝāĻžā§ā§ āĻāϞāĻžāĻĻāĻž āĻāĻāĻāĻĒā§āĻ āĻĻāĻŋāĻāĨ¤
- āĻā§āĻĄā§āϰ āĻĢā§āϞā§āĻā§āϏāĻŋāĻŦāĻŋāϞāĻŋāĻāĻŋ āĻ āϰāĻŋāĻāĻāĻā§āĻŦāϞāĻŋāĻāĻŋ āĻŦāĻžā§āĻžāύā§āϰ āĻāύā§āϝāĨ¤
đ§Ē āĻāĻĻāĻžāĻšāϰāĻŖ ā§§ â Sleep Time:
class Person {
getSleep() {
console.log(`I am sleeping for 8 hours per day`);
}
}
class Student extends Person {
getSleep() {
console.log(`I am sleeping for 7 hours per day`);
}
}
class Developer extends Person {
getSleep() {
console.log(`I am sleeping for 6 hours per day`);
}
}
const getSleepingHours = (param: Person) => {
param.getSleep(); // āĻā§āύ āĻā§āϞāĻžāϏā§āϰ instance āĻĻāĻŋāĻā§āĻā§, āϤāĻžāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰāĻŦā§
}
const karim = new Person();
const rahim = new Student();
const hasan = new Developer();
getSleepingHours(karim); // I am sleeping for 8 hours per day
getSleepingHours(rahim); // I am sleeping for 7 hours per day
getSleepingHours(hasan); // I am sleeping for 6 hours per day
đ āĻāĻāĻžāύ⧠getSleepingHours()
āĻĢāĻžāĻāĻļāύ Person
āĻāĻžāĻāĻĒ āĻā§āϰāĻšāĻŖ āĻāϰāĻā§, āĻāĻŋāύā§āϤ⧠subclass āĻ
āύā§āϝāĻžā§ā§ āĻāĻŋāύā§āύ āĻāĻŋāύā§āύ āĻŽā§āϏā§āĻ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰāĻā§āĨ¤ āĻāĻāĻŋāĻ āĻšāϞ⧠Runtime PolymorphismāĨ¤
đ§Ē āĻāĻĻāĻžāĻšāϰāĻŖ ⧍ â Shape Area:
class Shape {
getArea(): number {
return 0;
}
}
class Circle extends Shape {
constructor(public radius: number) {
super();
}
getArea(): number {
return Math.PI * this.radius * this.radius;
}
}
class Reactangle extends Shape {
constructor(public height: number, public width: number) {
super();
}
getArea(): number {
return this.height * this.width;
}
}
const getShapeArea = (shape: Shape) => {
console.log(shape.getArea());
}
const round = new Circle(5);
const box = new Reactangle(10, 20);
getShapeArea(round); // 78.54...
getShapeArea(box); // 200
đ āĻāĻāĻžāύ⧠āĻāĻāĻ getShapeArea()
āĻĢāĻžāĻāĻļāύ āĻāĻŋāύā§āϤ⧠āĻāϞāĻžāĻĻāĻž Shape
āĻāĻžāĻāĻĒā§āϰ āĻāύāĻĒā§āĻ āĻ
āύā§āϝāĻžā§ā§ āĻāϞāĻžāĻĻāĻž āĻĢāϞāĻžāĻĢāϞ āĻĻāĻŋāĻā§āĻā§āĨ¤
â āĻā§āύ āĻĻāϰāĻāĻžāϰ?
- āĻāĻāĻžāϧāĻŋāĻ āĻāĻžāĻāĻĒā§āϰ āĻ āĻŦāĻā§āĻā§āĻāĻā§ āĻāĻāĻāĻāĻžāĻŦā§ āĻā§āϰāĻŋāĻ āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
- āĻāĻā§āϏāĻā§āύāϏāĻŋāĻŦāϞ āĻ āĻŽāĻŋāύā§āĻā§āύā§āĻŦāϞ āϏāĻŋāϏā§āĻā§āĻŽ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
đ āĻāĻĒāĻāĻžāϰāĻŋāϤāĻž:
āϏā§āĻŦāĻŋāϧāĻž | āĻŦā§āϝāĻžāĻā§āϝāĻž |
---|---|
āϰāĻŋāĻāĻāĻā§āĻŦāϞ āĻā§āĻĄ | āĻāĻāĻŦāĻžāϰ āĻĢāĻžāĻāĻļāύ āϞāĻŋāĻā§ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻžāĻāĻĒā§āϰ āĻ āĻŦāĻā§āĻā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§ |
Maintainable | āύāϤā§āύ āĻāĻžāĻāĻĒ āϝā§āĻ āĻāϰāϞā§āĻ āĻŽā§āϞ āĻā§āĻĄ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻšā§ āύāĻž |
Dynamic behavior | āĻ āĻŦāĻā§āĻā§āĻ āĻāĻžāĻāĻĒ āĻ āύā§āϏāĻžāϰ⧠runtime-āĻ āĻāϞāĻžāĻĻāĻž āĻāĻāϰāĻŖ āĻšā§ |