我们知道在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
class B extends A{
}

但是在实现方面(implement),在TypeScript中也可以去implement一个类:

class C implements A {
m(): void { }
}

那么问题来了:类B和类C在行为上有什么不同?我该如何选择?

问题解答

implements关键字将类A当作一个接口,这意味着类C必须去实现定义在A中的所有方法,无论这些方法是否在类A中有没有默认的实现。同时,也不用在类C中定义super方法。

而就像是extends关键字本身所表达的意思一样,你只需要实现类A中定义的虚方法,并且关于super的调用也会有效。

我想在抽象方法的情况下,这并没有什么区别。但是很少有只使用抽象方法的类,如果只使用抽象方法,最好将其转换为接口。

【翻译】在TypeScript中,Extends和Implements一个抽象类有什么不同的更多相关文章

  1. Java 中extends与implements使用方法

    Java 中extends与implements使用方法 标签: javaclassinterfacestring语言c 2011-04-14 14:57 33314人阅读 评论(7) 收藏 举报 分 ...

  2. JAVA中extends 与implements区别

    JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...

  3. JAVA中extends 与implements有啥区别?

    JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...

  4. java中extends与implements的区别

    学了java很久了,久不用之后给同学解决一个java问题的时候,就卡在这个标题上了. 下面是java中extends与implements的区别: 1. 在类的声明中,通过关键字extends来创建一 ...

  5. JAVA中extends 与implements的用法

    1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重 ...

  6. java中extends和implements的区别

    implements:接口 1.实现一个接口就是要实现该接口中的所有方法(抽象类除外) 2)接口中的方法都是抽象的 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口 extends:继承父 ...

  7. Java 中extends与implements使用方法 (转载)

    转自:http://blog.csdn.net/chen_chun_guang/article/details/6323201 初学Java语言, 代码中的extends和implements让我感到 ...

  8. dart中extends、 implements、with的用法与区别

    一.概述 继承(关键字 extends) 混入  mixins (关键字 with) 接口实现(关键字 implements) 这三种关系可以同时存在,但是有前后顺序: extends -> m ...

  9. java中请给出一个抽象类,可以继承实体类的例子

    例1.7.2(抽象类可以继承实体类)- class VehMark_to_win {    void steer() {        System.out.println("Turn st ...

随机推荐

  1. Chrome无界面启动使用

    Method1: from selenium import webdriver # 创建chrome参数对象opt = webdriver.ChromeOptions() # 把chrome设置成无界 ...

  2. construct2 入门

    construct2特点 construct2是一款跨平台二维游戏开发引擎,不需要编码,通过定义各个部件和事件完成html5的游戏开发.该引擎可以将开发的封装成多种形式,如phonegap.cocoo ...

  3. 目标检测论文解读13——FPN

    引言 对于小目标通常需要用到多尺度检测,作者提出的FPN是一种快速且效果好的多尺度检测方法. 方法 a,b,c是之前的方法,其中a,c用到了多尺度检测的思想,但他们都存在明显的缺点. a方法:把每图片 ...

  4. Spring Boot 各版本的Java版本要求

    Spring Boot 各版本的Java版本要求 Spring Boot 与 Java 对应版本,以下表格由官方网站总结. 官网:https://spring.io/projects/spring-b ...

  5. python基础之三:int、bool、str

    一.数据类型之整型的函数使用 i = print("该整型数字所占有效比特位的长度是:%d" % i.bit_length()) print(i.to_bytes(, " ...

  6. OpenCV 学习笔记(16)open创建无边框的显示窗口

    https://blog.csdn.net/weixin_41794771/article/details/93198098 讲解地址 // 1获取窗口句柄 winName 窗口名字 HWND win ...

  7. Java Map常用操作

    Java之map常用操作 package basic; import java.util.HashMap; import java.util.Map; /** *Map常用操作方法 */ public ...

  8. [BZOJ1015/JSOI2008]星球大战

    // 此博文为迁移而来,写于2015年7月16日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6le.html 1.题 ...

  9. # 数位DP入坑

    Hdu 2089 不要62 #include<iostream> #include<cstdio> #include<cmath> #include<cstr ...

  10. 一本通 1615:【例 1】序列的第 k 个数

    传送门 我在这里! 思路 输入一个序列的前三个数并求出这个序列的第K项,这个数列不是等比序列就是等差数列,等差数列比较好判断,如果序列中\(a_{i+2}-a_{i+1}=a_{i+1}-a_{i}\ ...