面向对象概念
面向对象(Object-Oriented Programming, OOP)的四大核心概念:封装、继承、多态、抽象。
举例背景:我们来设计一个「武林角色系统」
比如你在开发一个武侠游戏系统,其中有“人物”这一类对象,比如「李寻欢」、「西门吹雪」、「不良人」等。
1️⃣ 封装(Encapsulation)
把数据和行为“封”在一个对象里,对外只暴露该暴露的内容。
class WulinRole {
private health: number;
constructor(public name: string) {
this.health = 100;
}
takeDamage(amount: number) {
this.health -= amount;
}
getHealth() {
return this.health;
}
}
说明:health
是私有的,外部不能随便修改,只能通过 takeDamage()
和 getHealth()
来控制 —— 这就是封装。
2️⃣ 继承(Inheritance)
子类可以继承父类的属性和方法,代码复用。
class Assassin extends WulinRole {
constructor(name: string) {
super(name);
}
assassinate(target: WulinRole) {
console.log(`${this.name} 一击刺向 ${target.name}!`);
target.takeDamage(40);
}
}
说明:Assassin
(刺客)继承自 WulinRole
,拥有基础的血量和受伤机制,同时还能拓展自己的刺杀技能。
3️⃣ 多态(Polymorphism)
同一个方法名,在不同类中可以表现出不同的行为。
class Swordsman extends WulinRole {
attack() {
console.log(`${this.name} 使用剑法攻击!`);
}
}
class Monk extends WulinRole {
attack() {
console.log(`${this.name} 使出降龙十八掌!`);
}
}
function battle(role: WulinRole) {
(role as any).attack(); // 不同角色,表现不同
}
说明:attack()
方法对不同角色表现不一样,这就是多态。
4️⃣ 抽象(Abstraction)
只暴露必要的接口,隐藏实现细节。常通过“抽象类”或“接口”来实现。
abstract class Role {
constructor(public name: string) {}
abstract attack(): void; // 不提供实现,子类自己定义
}
class Ninja extends Role {
attack() {
console.log(`${this.name} 暗影突袭!`);
}
}
说明:Role
是抽象类,只定义了 attack()
方法接口,不关心实现细节,子类自己来实现。
✅ 总结一句话:
概念 | 通俗理解 |
---|---|
封装 | 把数据藏起来,只暴露接口 |
继承 | 子类继承父类,代码复用 |
多态 | 同一接口,不同实现 |
抽象 | 只暴露必要行为,隐藏细节 |
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。