面向对象的编程(TypeScript)重载(overloading)和重写(overriding)

在面向对象的编程过程中通常为了提供代码的效率,我们通常会用到用到重载和重写这两种方法来提高代码的效率

重载

方法名称相同,参数的类型或者个数不同;

重载是面向面向对象编程的一种特有的写法,它可以允许一个函数在实现的过程中有多个入口,而且只用实现一次

function overload(x:string,y:string):void;
function overload(x:number,y:number):number;
function overload(x: number, y: number, z: number):number;
function overload(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(overload(1, 4));
console.log(overload(1, 4, 6))
overload("a","a")

上述就是普通的方法重载
在这里插入图片描述
下面是重载在类中应用

class Overload{
    overload(x: string, y: string): void;
    overload(x: number, y: number): number;
    overload(x: number, y: number, z: number): number;
    overload(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)
    }
}
var ol = new Overload();
console.log(ol.overload(1, 4));
console.log(ol.overload(1, 4, 6))
ol.overload("a", "a")

可以看出重载会根据参数来决定要从内个入口进入,然后执行相应的代码块

重写

方法名称,参数类型,返回值类型全部相同

当父类和其派生类拥有同一个方法时,出现这种情况,就是方法的重写
主要的作用:在保有父类的方法特征的同时,自身也拥有一些独特的特征

class Person {
	eat(){
		console.log("吃")
	}
}
class Student extends Person {
    constructor() {
        super()
    }
    eat() {
        console.log("花里胡哨的")
        super.eat()
    }
}
var student = new Student()
student.eat() ;
// 花里胡哨的
// 吃

从原生js原型链的角度上来看待这个方法的重写
当一个对象要执行一个方法的时候,会从原型链上从上往下找下去,当发现首次发现这个方法的时候,就会去执行,student这对象的原型时Student类其次是Person类,所以会首先执行Student类中的方法,然后Student类eat方法中有super.eat()意思是同时也引用了父类的eat方法,然后就实现了方法的重载,也可以试着删除super.eat()试试

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值