本文首发于我的个人Blog阿西BUG,欢迎大家批评指正


前言

最近在学习pureMVC,发现其中不少类继承的时候会写成形如export default class AppFacade extends puremvc.Facade implements puremvc.IFacade {...}的样子;最初我的理解中,extendsimplement都是继承的意思,但是又一想,都是继承完全可以写成export default class AppFacade extends puremvc.Facade puremvc.IFacade {...}
那么问题来了,extends和implement的区别是什么呢?


假设

假如我有一个干净的抽象类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的调用也会有效。
我想在抽象方法的情况下,这并没有什么区别。但是很少有只使用抽象方法的类,如果只使用抽象方法,最好将其转换为接口。

回到前言中的例子,Facade是一个基类,IFacade是基于Facade扩展出来的一个接口类,那么此时AppFacade具有Facade的属性,同时又必须实现IFacade中定义的方法。

---end---

extends和implement的区别相关推荐

  1. Interface、extends、implement的区别

    interface是定义接口的关键字. implement是实现接口的关键字. extends是子类继承父类的关键字. 1.interface接口定义不能包含任何属性(如:public.private ...

  2. 【Java】泛型中 extends 和 super 的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  3. java interface和类的 extends与implement 的简单总结

    interface和类.extends与implement 接口 一个接口则可以同时extends多个接口,却不能implements任何接口 类 一个类只能extends一个父类,但可以implem ...

  4. java中implements是什么意思_Java:extends和implements的区别+用法

    Java代码中的extends和implements让我感到很迷惑,现在终于弄明白它们之间的区别和用法了. //定义一个Runner接口 public inerface Runner { int ID ...

  5. Java中extends 与 implement 区别

    简单说:  1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承, 2.JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implement ...

  6. 浅谈java中extends与implements的区别

    Extends可以理解为全盘继承了父类的功能.implements可以理解为为这个类附加一些额外的功能:interface定义一些方法,并没有实现,需要implements来实现才可用.extend可 ...

  7. Java中<? super T>和List<? extends T>的区别

    Java中<? super T>和List<? extends T>的区别 <? extends T> 下面通配符声明List<? extends Numbe ...

  8. 图解extends and implements 的区别

    implements和extends的区别

  9. Java泛型中extends和super的区别?

    区别 <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概 ...

  10. java super extend 区别_Java泛型中extends和super的区别

    extends T>和 super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. extends T&g ...

最新文章

  1. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...
  2. 阿里P9谈程序员程序员的青春饭
  3. Linux中Oracle的sqlplus下退格和Del键无效的问题解决
  4. keras实例化model后,结果返回NoneType
  5. 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)
  6. 记忆化搜索=搜索的形式+动态规划的思想(来自百度百科)
  7. python垃圾分类准确率计算公式_准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure...
  8. 数据分析工具有哪些类型
  9. CODEVS 2102 石子归并 2
  10. java 风能玫瑰图,施用java awt画风向玫瑰图及风能玫瑰图程序
  11. 超详细讲解。QT+OpenGL画出不同纹理面立方体(部分面可反色)
  12. 电脑需要装杀毒软件吗?两个理由看完你做决定
  13. 008.UG_NX自由曲面
  14. Cocos2dx之Scene和Scene Graph
  15. java编写邮箱地址、邮箱验证
  16. 选修课:唐宋词课堂鉴赏笔记01
  17. nodejs+express解决微信公众号token验证失败
  18. linux关闭ipv6dns,dns关闭ipv6
  19. 魔鬼与牧师动作分离版
  20. 无线系统笔记(2)----麦克斯韦方程组

热门文章

  1. Bootstrap可视化布局
  2. 能量,功率,能量谱和功率谱密度
  3. mac 上装windows系统 win10 没声音 耳机也没声音
  4. 程序设计与数据结构_周立功【读书笔记】
  5. 辐射能量、辐照度、辐射亮度
  6. 德生收音机创始人梁伟(华工杰出校友)的无线电之梦
  7. python自动注册邮箱_python+selenium实现163邮箱自动登陆的方法
  8. python合并单元格的方法是_python合并多个excel单元格的方法
  9. 愚人节主题的微信公众号图文排版有哪些搞怪素材?
  10. 苹果电脑的文件怎样拷贝入移动硬盘里