继承:是面向对象的精华、目的
1.继承特别常见
oText -> HTMLInputElement -> HTMLElement -> Element -> Node
2.继承的目的
i. 清晰的层次 - 阅读方便,公共操作/属性
ii. 功能得到重用(属性/方法)
iii. *使用多态来简化程序
3.适用场景
原则:
i. 拥有明确的、合理的父子关系
ii. 子类能够完全覆盖父类(子类 >= 父类)
例子:
员工类 Staff(name, 工资)
coder extends Staff
程序员 拥有父类属性和方法,还拥有自己的 code language
实例:
DatePicker extends Component
ImageFile extends File
基础的概念:
1. 父类:被继承的类(基类、超类)
2. 子类:通过继承出来的新类 (派生类、衍生类)
3. 继承:派生
4. 抽象类:本身无法直接实例化,仅仅作为父类使用(公共的功能)
* js本身不支持抽象类,关键字 abstract 暂不支持
继承的写法
1. 传统 //es5前
function A(user) {
this.user = user;
}
A.prototype.show = function() {
console.log(this.user);
}
function B(user, age) {
A.call(this, user);
this.age = age;
}
let b = new B('dd', 23);
console.log(b.user);
- ES6
constructor()方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。
一个类必须有constructor()方法,如果没有显式定义,一个空的constructor()方法会被默认添加。 ```jsx class A{ constructor(name){ this.name = name; } show(){ console.log(this.name); } }
class B extends A{ constructor(name, age) { // 继承父类的属性 super(name); this.age = age; } }
const b = new B(‘cc’);
b.show();
```
多重继承
一个类由多个父类派生出来的
*java、js 不支持多重继承
多重继承 - 替代方案就是组合
*组合
练习:
父类:公共的 属性、方法
例子: