一、封装:安全性
二、继承:扩展性
可以通过 extends
关键字实现继承
1、减少重复的代码:
javascript">class Animals { // 父类(超类)constructor(name,age){this.name = name;this.age = age;}run(){console.log('跑')}
}class Dog extends Animals { // 子类,将 Animals 类中的代码复制到 Dog 类中
}
class Cat extends Animals { // 子类,将 Animals 类中的代码复制到 Cat 类中
}let dog = new Dog('大黄',2)
let cat = new Cat('喵喵',3)
console.log(dog)
console.log(cat)
2、在不修改一个类的情况下,对其进行扩展: OCP原则
重写父类中的方法
javascript">// 父类(超类)
class Animals {constructor(name,age){this.name = name;this.age = age;}run(){console.log('跑')}
}
// 子类
class Dog extends Animals {// 定义一个和父类同名的函数,来重写父类中的方法run(){console.log('狗狗在跑')}
}
class Cat extends Animals {// 定义一个和父类同名的函数,来重写父类中的方法run(){console.log('猫猫在跑')}
}let dog = new Dog('大黄',2)
let cat = new Cat('喵喵',3)
dog.run()
cat.run()
重写父类的构造函数 / 在子类的构造函数中新增属性
javascript">// 父类(超类)
class Animals {constructor(name,age){this.name = name;this.age = age;}run(){console.log('跑')}}// 子类class Dog extends Animals {constructor(name,age,gender){// 重写构造函数时,构造函数的第一行必须是super()super(name,age) // 调用父类的构造函数,并且将原本的参数传入this.gender = gender}}class Cat extends Animals {// 定义一个和父类同名的函数,来重写父类中的方法run(){console.log('猫猫在跑')// 调用父类中的方法super.run()}}let dog = new Dog('大黄',2,'公') // 前两个参数传给了父类的构造函数let cat = new Cat('喵喵',3)console.log(dog)cat.run()
三、多态:给代码提供了灵活性
多态是指参数的多态,即很多个对象都可以调用同一个方法。在该方法中,不对入参的类型进行限制,只需要满足某些条件,就能够返回不同的值。