3.类的继承
3.1继承
现实中的继承:子承父业,比如我们都继承了父亲的姓。
程序中的继承:子类可以继承父类的一些属性和方法。
语法:
class Father{ //父类
}
class Son extends Father{ //子类继承父类
}
3.2super关键字
super关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数。
class Father {
constructor(x,y){
this.x = x;
this.y = y;
}
sum(){
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x,y){
super(x,y); //调用了父类中的构造函数
}
}
var son = new Son(1,2);
son.sum();
super关键字调用父类普通函数
class Father {
say() {
return '我是爸爸';
}
}
class Son extends Father {
say() {
// console.log('我是儿子');
console.log(super.say() + '的儿子'); //我是爸爸的儿子
// super.say() 就是调用父类中的普通函数 say()
}
}
var son = new Son();
son.say();
- 继承中的属性或者方法查找原则:就近原则
- 1.继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的。
- 2.继承中,如果子类里面没有,就去查找父类有没有这个方法,如果有,就执行父类的这个方法(就近原则)
//父类有加法方法
class Father {
constructor(x,y) {
this.x = x;
this.y = y;
}
sum() {
console.log(this.x + this.y);
}
}
//子类继承父类加法方法 同时 扩展减法方法
class Son extends Father {
constructor(x,y) {
//利用super调用父类的构造函数
//super必须在子类this之前调用
super(x,y);
this.x = x;
this.y = y;
}
subtract() {
console.log(this.x - this.y);
}
}
var son = new Son(5,3);
son.subtract(); //2
son.sum(); //8
注意:(重点)
子类在构造函数中使用super,必须放到this前面(必须先调用父类的构造方法,在使用子类构造函数)。