在封装、多态之后,就是继承了。
继承
所谓继承就是子类继承父类的属性和方法,目的是可以让子类的实例能够使用父类的属性和方法。
我们这里不讨论ES5中利用原型实现的继承,而是只讨论ES6中新添加的关键字extends实现的继承。
//父类
class Parent {
constructor(name) {
this.name = name
}
eat() {
console.log('这是一个' + this.name);
}
}
//子类
class Child extends Parent {
constructor(name, age) {
super(name)
this.age = age
}
}
let obj = new Child('西红柿', 22);
obj.eat();
console.log(obj.name, obj.age); // 西红柿 22
ES5继承和ES6继承的区别:
ES5:先创建子类的实例对象,再把父类的属性和方法添加到this上。
ES6:先创建父类的实例对象this,再用子类的构造函数修改this。因为子类没有自己的this,所以必须调用父类的super()方法,否则新建实例会报错。
ES6语言中的extends是用于创建一个子类的关键字。它可以继承一个已经存在的类,并在其上添加新的属性或方法,以便进行更多的功能扩展。
extends的作用就是让子类继承父类的行为,并且可以在子类中添加新的成员或者覆盖父类的成员。这样可以减少代码的重复,提高代码的复用性。
使用extends关键字创建子类的语法如下:
class 子类名 extends 父类名 {
constructor(子类参数列表) {
super(父类参数列表);
// 子类的构造函数
}
// 子类自己的方法
}
其中,子类名表示要创建的子类的名称;
extends表示继承关系,后面紧跟的是父类名称;
constructor表示子类的构造函数,其中必须调用父类的构造函数;
super表示调用父类的构造函数。
子类的方法可以覆盖父类的同名方法,如果需要调用父类的方法,使用super关键字。
笔者认为继承本身就是对类定义的进一步抽象,使代码具有更好的复用性,降低代码的耦合度,实现代码的可拓展性。