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的父类。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雪天的夏风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值