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();