在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我们知道在TypeScript中一个类既可以被implement也可以被extends的 有一些C#或java基础的同学可能会对此感到困惑 因为在上述两个面向对象的语言里面只有接口可以被implement,而只有类才能被extends。 那我们来解释一下在TypeScript中这两个关键词有什么不同。 最近在StackOverflow中查到了这个问题,所以顺手翻译了一下并且记录了下来 原文的地址是:https://stackoverflow.com/questions/35990538/extending-vs-implementing-a-pure-abstract-class-in-typescript/35990799#35990799 问题描述Extending vs. implementing a pure abstract class in TypeScript假设我有一个干净的抽象类A: abstract class A { abstract m(): void; } 在继承(extends)方面,就像C#或者java里面那样,我可以像下面这样来继承这个抽象类: //TypeScript 但是在实现方面(implement),在TypeScript中也可以去implement一个类: class C implements A { m(): void { } } 那么问题来了:类B和类C在行为上有什么不同?我该如何选择? 问题解答implements关键字将类A当作一个接口,这意味着类C必须去实现定义在A中的所有方法,无论这些方法是否在类A中有没有默认的实现。同时,也不用在类C中定义super方法。 而就像是extends关键字本身所表达的意思一样,你只需要实现类A中定义的虚方法,并且关于super的调用也会有效。 我想在抽象方法的情况下,这并没有什么区别。但是很少有只使用抽象方法的类,如果只使用抽象方法,最好将其转换为接口。
转载于:https://www.cnblogs.com/pangjianxin/p/10901115.html 我们知道在TypeScript中一个类既可以被implement也可以被extends的 有一些C#或java基础的同学可能会对此感到困惑 因为在上述两个面向对象的语言里面只有接口可以被implement,而只有类才能被extends。 那我们来解释一下在TypeScript中这两个关键词有什么不同。 最近在StackOverflow中查到了这个问题,所以顺手翻译了一下并且记录了下来 原文的地址是:https://stackoverflow.com/questions/35990538/extending-vs-implementing-a-pure-abstract-class-in-typescript/35990799#35990799 问题描述Extending vs. implementing a pure abstract class in TypeScript假设我有一个干净的抽象类A: abstract class A { abstract m(): void; } 在继承(extends)方面,就像C#或者java里面那样,我可以像下面这样来继承这个抽象类: //TypeScript 但是在实现方面(implement),在TypeScript中也可以去implement一个类: class C implements A { m(): void { } } 那么问题来了:类B和类C在行为上有什么不同?我该如何选择? 问题解答implements关键字将类A当作一个接口,这意味着类C必须去实现定义在A中的所有方法,无论这些方法是否在类A中有没有默认的实现。同时,也不用在类C中定义super方法。 而就像是extends关键字本身所表达的意思一样,你只需要实现类A中定义的虚方法,并且关于super的调用也会有效。 我想在抽象方法的情况下,这并没有什么区别。但是很少有只使用抽象方法的类,如果只使用抽象方法,最好将其转换为接口。
|
请发表评论