Skip to main content

面向对象三要素

继承

子类继承父类

class People {
constructor(name, age) {
this.name = name;
this.age = age
}
eat() {
console.log(`${this.name} eat something`)
}
speak() {
console.log(`my name is ${this.name}, age ${this.age}`)
}
}

class Student extends People {
constructor(name, age, number) {
super(name, age)
this.number = number
}
study() {
console.log(`${this.name} study`)
}
}

const olu = new Student('olu', 3, 'A1')
olu.eat();
olu.speak();
olu.study();

封装

数据的权限和保密

  • public 完全开放
  • protected 对子类开放
  • private 对自己开放
class People {
name
age
protected weight
constructor(name, age) {
this.name = name;
this.age = age
this.weight = 250
}
eat() {
console.log(`${this.name} eat something`)
}
speak() {
console.log(`my name is ${this.name}, age ${this.age}`)
}
}

class Student extends People {
number
private lover
constructor(name, age, number) {
super(name, age)
this.number = number
this.lover = 'olu'
}
study() {
console.log(`${this.name} study`)
}
getWeight(){
console.log(`${this.weight}`)
}
}

const olu = new Student('olu', 3, 'A1')
olu.eat();
olu.speak();
olu.getWeight();

多态

同一接口不同实现

class People {
constructor(name) {
this.name = name
}
printName() {
console.log(`my name is ${this.name}`)
}
}

class Student extends People {
constructor(name) {
super(name)
}
printName() {
console.log(`student name is ${this.name}`)
}
}

class Worker extends People {
constructor(name) {
super(name)
}
printName() {
console.log(`worker name is ${this.name}`)
}
}

const olu = new Worker('olu')
olu.printName()