**
类的继承extends和super关键字
**
2.1继承
现实中的继承:子承父业,比如儿子继承父亲的姓
程序中的继承:子类可以继承父类的一些属性和方法,只需写上entends就可以子类继承父类
语法:
class Father{//父类
}
class Son entends Father {//子类继承父类
}
例:
class Father {
constructor(){
}
money(){
console.log('100元')
}
}
class Son extends Father{
}
var son1=new Son()
son1.money()
解释:money这个方法是在Father里面的,但是实例化son1这个对象后调用money是能够显示“100元”,所以extends作用是让子类继承父类。
当然除了本身的用法,extends继承还遵循就近原则,看以下例子
class Father {
say(){
console.log('我是爸爸')
}
}
class Son {
say(){
console.log('我是儿子')
}
}
var son=new Son()
son.say()
这一段代码毫无疑问会输出‘我是儿子’,但是下面一段代码Son继承了Father后会输出什么呢?
class Father {
say(){
console.log('我是爸爸')
}
}
class Son extends Father{
say(){
console.log('我是儿子')
}
}
var son=new Son()
son.say()
这个结果也是‘我是儿子’,就算继承了父类,但是extends又一个就近原则,先去子类看一下有没有say方法,如果有则先调用子类的方法,如果没有,再去父类里调用这个方法
总结:继承中的属性或者方法查找原则:1,、继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有先执行子类的
2.继承中,如果子类里面没有,就去查找父类有没有这个方法,如果有,就执行父类这个方法(就近原则)
2.2super关键字
super关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数
例:
(1)调用父类中的构造函数,实现传参用父类里的sum方法
class Father {
constructor(m,n){
this.m=m
this.n=n
}
sum(){
console.log(this.m+this.n)
}
}
class Son extends Father{
constructor(x,y){
super(x,y)//调用父类的
//this.x=x
//this.y=y
constructor函数,把子类的值传给父类
}
}
var son1=new Son(3,5)
son1.sum()
注释掉的代码部分可能开始会这样想,既然子传父,直接给子赋值就可以用父类里面的方法,但是赋值只给了子类,并没有给父类,所以这样会出错,因此要用super调用父类里面的constructor函数把子类的值传给父类.
(2)super关键字调用父类普通函数
调用方法:super.父类函数名()
例:
class Father {
say1(){
return '我是爸爸'
}
}
class Son extends Father{
say(){
console.log(super.say1()+'的孩子')
//super.say1()就是调用父类中的普通函数
}
}
var son=new Son()
son.say()
结果输出的是‘我是爸爸的孩子’,通过这个例子可以知道super可以调用父类里面的普通函数的,直接super.say1().
(3)不仅传参给父类,子类也需要参数时,super必须放在赋值实例之前
在开发过程中还有一种可能,父类有加法操作,子类不仅继承父类的加法操作还想扩展减法操作
例:
class Father{
constructor(m,n){
this.m=m
this.n=n
}
sum(){
console.log(this.m+this.n)
}
}
//子类继承父类加法,同时扩展减法方法
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 son2=new Son(5,3)
son2.sum()
son2.subtract()
父亲永远放在第一位!
注意:子类在构造函数中使用super,必须放在this前面(必须先调用父类的构造函数方法,在使用子类构造方法)