文章目录

  • 1. 相同点
  • 2. 不同点 1 :翻译上的区别
  • 3. 不同点 2: 适用范围的区别
  • 4. 附:实现子类型的方式
  • 5. 参考

1. 相同点

  • subtype 和 subclass 都表示类型层次结构(type hierarchy)关系中的「子类」

  • supertype 和 superclass 都表示类型层次结构(type hierarchy)关系中的「父类」(「超类」)

这里没有使用「类继承关系」,是因为实现子类型的方式,可以不采用「继承」这种方式。

2. 不同点 1 :翻译上的区别

subtype 翻译为「子类型」
subclass 翻译为「子类」

supertype 翻译为 「父类型」或者 「超类型」
superclass 翻译为 「父类」或者「超类」

type 译为 「类型」,class 译为「类」

3. 不同点 2: 适用范围的区别

subtype 和 supertype ,是 语义范围 的概念。

subclass 和 superclass 是 编程语言的语言概念 ,可以使用 subclass 和 superclass 实现 subtype (supertype),也可以用其他的方式实现子类型。

在语义范围内,有 子类型 的概念,至于采用什么样的方式去实现 子类型,是跟具体的编程语言有关的,有的编程语言采用 子类 和 父类(继承)来实现 子类型,有的编程语言不是采用继承的方式,而是其它方式。

4. 附:实现子类型的方式

Barbara Liskov 在 《Data abstraction and hierarchy》 论文(1987.10) 中提到的 2 种实现子类型的方式(Section 3.2. Implementation Hierarchy):

方式2: 一种是 继承 (inheritance)

方式1: 另一种是 使用抽象类型作为另一种类型的代表Another way of doing the same thing is to use one (abstract) type as the rep of another.

更详细的内容,请见「参考」中的论文。

5. 参考

Barbara Liskov 《Data abstraction and hierarchy》 论文(1987.10)

在 《Data abstraction and hierarchy》的 Page 9 「3.3 Type Hierarchy」一节第二段)


We are using the words “subtype” and “supertype” here to emphasize that now we are talking about a semantic distinction. By contrast, “subclass” and “superclass” are simply linguistic concepts in programming languages that allow programs to be built in a particular way. They can be used to implement subtypes, but also, as mentioned above, in other ways.

翻译:我们在这里使用 “子类型” 和 “超类型” 这两个词来强调,现在我们正在谈论语义上的区别。相比之下,“子类”和“超类”只是编程语言中的语言概念,允许以特定的方式构建程序。它们可用于实现子类型,但如上所述,还可以以其他方式实现子类型。

subtype,supertype 与 subclass,superclass 的异同相关推荐

  1. Exception in thread “main“ java.lang.ClassCastException: test.SuperClass cannot be cast to test.SubC

    我创建的类是如下情况,编译过程中没有报错,但是当我执行该代码的时候,终端出现以下异常 Exception in thread "main" java.lang.ClassCastE ...

  2. 【LSP简史】里氏替换原则表述方式的变化,从学术到「人话」

    用不同的方式解释同一个事情,会理解的更深刻. 文章目录 表述 1:1987 ~ 1988 年,来自 Barbara Liskov 表述 2:1994 年,来自 Barbara Liskov 表述 3: ...

  3. 我对javascript对象的理解

    前言 JavaScript这门语言除了基本类型都是对象,可以说JavaScript核心就是对象,因此理解JavaScript对象及其种种特性至关重要,这是内功.本文介绍了我对es5对象,原型, 原型链 ...

  4. javascript-抽象工厂模式

    抽象工厂模式笔记    1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合)    2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽象类进行判断,不是则抛出错误    3.子 ...

  5. [前端面试经]百度和好未来的面试官把我榨干了

    百度和好未来的面试官把我榨干了 我,普通本科计算机专业,18年6月毕业,抛去实习,工作经验只有一年半,没想到自己临时的决定让我敲开了百度的大门,非常荣幸地成为百度的RD. 2019年最后一个月,由于当 ...

  6. JS继承和继承基础总结

    转自:https://www.cnblogs.com/diligenceday/p/4246515.html 首先,推荐一篇博客豪情的博客JS提高: http://www.cnblogs.com/ji ...

  7. java 常用英语单词

    教程由JAVA中文网整理校对发布(javaweb.cc) Abstract Window Toolkit(AWT)抽象窗口工具集 一个用本地图形组件实现的图形接口.这些组件提供了大部分的本地组件.这个 ...

  8. 随笔 javascript-抽象工厂模式

    随笔 javascript-抽象工厂模式 抽象工厂模式笔记    1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合)    2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽 ...

  9. 深入浅析js原型链和vue构造函数

    一.什么是原型链? 简单回顾下构造函数,原型和实例的关系: 每个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance ...

  10. Javascript 对象一(对象详解)

    JS创建对象的几种方法 1. Object 构造函数 创建 2. 对象字面量表示法 创建 3. 使用工厂模式创建对象 在 Car 函数中,返回的是一个对象.那么我们就无法判断返回的对象究竟是一个什么样 ...

最新文章

  1. java 中pc寄存器的作用_既然有PC寄存器,栈帧里的返回地址的作用是什么?
  2. Decorator pattern
  3. 删除前导0后缀0的几种方法
  4. 关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改
  5. python中、文件最重要的功能是( )和接收数据_Python基础语法14个知识点大串讲
  6. C++ STL容器之 list 初步
  7. Android环境的安装遇到的问题
  8. 格力:今日投放12万只格力口罩 明日起增至16万只
  9. android动态波浪效果,android贝塞尔曲线实现波浪效果
  10. LightweightCTI开发实录(5)板卡适配器概述
  11. 在ubuntu系统下cocos2dx移植到android平台
  12. 快到而立之年了,可是能撑得起而立吗?
  13. java的的socket编程_javasocket编程
  14. 4针串口线接法图_串口硬盘4针的小接口怎么样连接
  15. 振动试验设备的选择和使用
  16. 使用MediaPlayer的一些常见报错及解决方法-1
  17. NADH二钠CAS 606-68-8的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. Logger.error不打印错误堆栈信息问题
  19. 系统检测到您疑似使用网页抓取工具访问本_12款最常使用的网络爬虫工具推荐...
  20. android视频播放异常,Android 播放视频常见问题小结

热门文章

  1. matlab 求一元二次方程的根,如何用Matlab求一元二次方程式解的个数以及解
  2. Docker配置阿里云镜像加速器以及镜像的常用操作命令
  3. python实现三阶魔方还原
  4. 地铁运营行车组织方式
  5. 感觉自己技术还可以?十几个外包平台分享给你,让你外包接到手软!
  6. 设置单行省略的时候在搜狗浏览器里面导致页面布局紊乱
  7. LDA(Latent Dirichlet Allocation)主题模型
  8. 人工智能-马尔可夫模型
  9. 电子之TTL和CMOS门电路的区别
  10. LabWindows操作SQL SERVER