我们知道在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. 十、lambda表达式、内置函数之filter、map、reduce

    lambda表达式   学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 == : name = 'wupeiqi' else: name = 'ale ...

  2. 关系型数据库 RDS(Relational Database Service),知识点

    资料 网址 官方介绍 https://help.aliyun.com/document_detail/26092.html?spm=5176.2020520104.0.0.2b4b1450yqd1gg ...

  3. 07-C#笔记-运算符

    1. 支持++和-- 含义和C++中相同 2. 条件运算 同C++ 3. 位运算 ^ 异或 ~ 取反 4. 支持?:运算 5. 特殊 is 判断对象是否为某一类型. If( Ford is Car) ...

  4. 02-C#笔记-类的定义

    /* * Notes: * 1. 标识符必须以字母.下划线或 @ 开头,后面可以跟一系列的字母.数字( 0 - 9 ).下划线( _ ).@ * */ using System; namespace ...

  5. Python input() 函数

    Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型. Python2.x 中 input() 相等于 eval(raw_input(prompt)) ,用来获 ...

  6. springboot 整合 freemarker

    springboot 整合 freemarker 依赖 <parent> <groupId>org.springframework.boot</groupId> & ...

  7. encodeURIComponent() 函数可把字符串作为 URI 组件进行编码

    语法 encodeURIComponent(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 URI 组件或其他要编码的文本. 返回值 URIstring 的副本,其中的某 ...

  8. NOIP 2004 联合权值

    洛谷 P1351 联合权值 洛谷传送门 JDOJ 2886: [NOIP2014]联合权值 D1 T2 JDOJ传送门 Description 无向连通图 G有 n个点,n-1条边.点从 1到 n依次 ...

  9. yarn rest api未授权漏洞

    项目集群之前在yarn8088的web资源管理页面上看到一堆莫名的定时任务,就是黑客利用漏洞挖矿,最后禁用了8088端口. freebuff传送门: https://www.freebuf.com/v ...

  10. 解决github等外国网站突然无法链接的问题

    问题描述:可以ping通但是通过游览器不能访问. 直接用这个方法: