继承:是面向对象的精华、目的

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前

  1. function A(user) {
  2. this.user = user;
  3. }
  4. A.prototype.show = function() {
  5. console.log(this.user);
  6. }
  7. function B(user, age) {
  8. A.call(this, user);
  9. this.age = age;
  10. }
  11. let b = new B('dd', 23);
  12. console.log(b.user);
  1. 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 不支持多重继承

多重继承 - 替代方案就是组合

*组合

练习:
父类:公共的 属性、方法
例子: