TypeScript中重载跟重写的详解及区别

方法重写(Override)

不在一个类中,参数类型保持一致,方法内容可以不同
一个子类除了可以继承父类的属性和方法外,还可以重新写父类的方法;
重写:保留父类的方法名,但是方法的实现内容或成员的返回值类型都被子类更改。
简单重写的案例

class Animals {

 animalName: string;

 constructor(thename: string) {

  this.animalName = thename;

 }

 move(distance: number = 0) {

  console.log(`${this.animalName} moved ${distance}m.`);

 }

}

class Snake extends Animals {

 constructor(name: string) {

  super(name);

 }

 move(distance = 5) {

  console.log("jdjdjdjdj.....");

  super.move(distance);

 }

}

class Hourse extends Animals {

 constructor(name: string) {

  super(name);

 }

 move(distance = 45) {

  console.log("================");

  super.move(distance);

 }

}

let snake = new Snake("Sammy the Python");

let tom: Animals = new Hourse("Tommy the Palomino");



snake.move();

tom.move(34);

以上代码可以看出,方法重写只是对实现过程进行重新编写,返回值以及形参都不能发生改变
方法重写的优点
子类可以根据需要,定义自己的行为
方法重写的规则
1,子类的参数必须与从父类继承来的方法的参数保持一致
2,父类的方法只能被其子类重写
3,构造方法不能被重写
4,如果不能继承一个方法,那么就不能重写这个方法

方法重载(Overload)

是在一个类中,方法名字相同,参数不同.返回类型可以相同也可以不同
注意:
每个重载的方法(或构造函数)都必须有一个独一无二的参数类型列表
最常用的是构造器的重载
简单的方法重载案例

function f1(x:string,y:string):void;
function f1(x:number,y:number):number;
function f1(x: number, y: number, z: number):number;
function f1(x,y:(number|string),z?:number): any{
// ?: 表示可选参数
    if (typeof y === "number" && !z) {
        return x+y
    }
    if (z) {
         return x+y+z
    }
    console.log("void"+x+y)
}
console.log(f1(1, 4));
console.log(f1(1, 4, 6))

方法重载的规则
1,被重载的方法必须改变参数列表(可以是参数的个数,也可以为参数的类型)
2,被重载的方法可以改变返回类型
3,方法能够在同一个类中或者同一个子类中被重载

方法重写跟方法重载的区别

1,参数列表
重载必须修改,重写一定不修改
2,返回类型
重载必须修改,重写一定不修改
3,范围
重载方法在一个类中,重写发生在继承类中
4,定义
重载方法名称相同,参数类型或者个数不同,对权限没要求
重写方法名称,参数类型,返回值类型全部相同

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值