TS学习-类的继承

接这篇文章 TS学习-类

1,继承的作用

继承可以描述类与类之间的关系。
如果A和B都是类,并且可以描述为A是B,则A和B形成继承关系。

  • B是父类,A是子类
  • B派生A,A继承自B
  • B是A的基类,A是B的派生类
    A(男人女人小孩老人)都是B(人)。

如果A继承自B,则A中自动拥有B中所有的成员。

class People {
    name: string = "";
    age: number = 1;

    sayHello() {
        console.log(`我是${this.name}`);
    }
}

class Man extends People {}

const man = new Man();
console.log(man); // 拥有 People 类的所有成员。

2,成员的重写 Override

指在子类中覆盖父类的成员。

  • 不能改变父类成员的类型。
  • 对方法,参数的数量和类型得保持一致。

有一种情况,如果父类的方法没有参数,但有的子类需要传参。解决办法:

  • 将参数作为子类的成员属性,这样子类就不用传参了。
  • 或者去掉父类中的方法,因为子类之间方法实现差距过大时,不应该放在父类作为公共方法了。

如果方法重写了,通过 this 调用的是子类重写后的方法,通过 super 调用的是父类的方法。
没有重写,则 this 和 super 效果一样,都是调用父类的方法。

3,类型匹配(兼容性)

鸭子分辨法。
子类的对象,始终可以用父类做约束。在面向对象中,这种情况被称为里氏替换原则。
子类的成员对象肯定是 ≥ 父类的。

class People {
    name: string = "";
    public age: number = 1;

    sayHello() {
        console.log(`我是${this.name}`);
    }
}

class Man extends People {
    color: string = 'yellow'
}

const man:People = new Man();

但是,通过父类约束时,实例对象只能使用父类中有的成员,无法直接使用子类中新增的成员。如果要使用,需要先判断实例对象的类型,通过instanceof:

const man:People = new Man();
if (man instanceof Man) {
    console.log(man.color);
}

4,修饰符

  • public修饰符(默认),子类和实例对象都可以使用。
  • protected修饰符,子类可使用,实例对象无法使用。
  • private修饰符,子类和实例对象都无法使用。

5,单根性和传递性

单根性:每个类最多只能用于一个父类。
传递性:如果A是B的父类,并且B是C的父类,则A也是C的父类。

相关推荐

  1. TS学习-继承

    2024-05-09 11:50:02       12 阅读
  2. TS学习02 面向对象 、封装继承、接口、泛型

    2024-05-09 11:50:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 11:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 11:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 11:50:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 11:50:02       20 阅读

热门阅读

  1. 图搜索算法详解-概述

    2024-05-09 11:50:02       9 阅读
  2. centos常用命令介绍

    2024-05-09 11:50:02       10 阅读
  3. 掌握SQL的时间序列分析利器:LEAD与LAG函数详解

    2024-05-09 11:50:02       10 阅读
  4. 学习R语言第六天

    2024-05-09 11:50:02       10 阅读