subtype,supertype 与 subclass,superclass 的异同
文章目录
- 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 的异同相关推荐
- Exception in thread “main“ java.lang.ClassCastException: test.SuperClass cannot be cast to test.SubC
我创建的类是如下情况,编译过程中没有报错,但是当我执行该代码的时候,终端出现以下异常 Exception in thread "main" java.lang.ClassCastE ...
- 【LSP简史】里氏替换原则表述方式的变化,从学术到「人话」
用不同的方式解释同一个事情,会理解的更深刻. 文章目录 表述 1:1987 ~ 1988 年,来自 Barbara Liskov 表述 2:1994 年,来自 Barbara Liskov 表述 3: ...
- 我对javascript对象的理解
前言 JavaScript这门语言除了基本类型都是对象,可以说JavaScript核心就是对象,因此理解JavaScript对象及其种种特性至关重要,这是内功.本文介绍了我对es5对象,原型, 原型链 ...
- javascript-抽象工厂模式
抽象工厂模式笔记 1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合) 2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽象类进行判断,不是则抛出错误 3.子 ...
- [前端面试经]百度和好未来的面试官把我榨干了
百度和好未来的面试官把我榨干了 我,普通本科计算机专业,18年6月毕业,抛去实习,工作经验只有一年半,没想到自己临时的决定让我敲开了百度的大门,非常荣幸地成为百度的RD. 2019年最后一个月,由于当 ...
- JS继承和继承基础总结
转自:https://www.cnblogs.com/diligenceday/p/4246515.html 首先,推荐一篇博客豪情的博客JS提高: http://www.cnblogs.com/ji ...
- java 常用英语单词
教程由JAVA中文网整理校对发布(javaweb.cc) Abstract Window Toolkit(AWT)抽象窗口工具集 一个用本地图形组件实现的图形接口.这些组件提供了大部分的本地组件.这个 ...
- 随笔 javascript-抽象工厂模式
随笔 javascript-抽象工厂模式 抽象工厂模式笔记 1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合) 2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽 ...
- 深入浅析js原型链和vue构造函数
一.什么是原型链? 简单回顾下构造函数,原型和实例的关系: 每个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance ...
- Javascript 对象一(对象详解)
JS创建对象的几种方法 1. Object 构造函数 创建 2. 对象字面量表示法 创建 3. 使用工厂模式创建对象 在 Car 函数中,返回的是一个对象.那么我们就无法判断返回的对象究竟是一个什么样 ...
最新文章
- java 中pc寄存器的作用_既然有PC寄存器,栈帧里的返回地址的作用是什么?
- Decorator pattern
- 删除前导0后缀0的几种方法
- 关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改
- python中、文件最重要的功能是( )和接收数据_Python基础语法14个知识点大串讲
- C++ STL容器之 list 初步
- Android环境的安装遇到的问题
- 格力:今日投放12万只格力口罩 明日起增至16万只
- android动态波浪效果,android贝塞尔曲线实现波浪效果
- LightweightCTI开发实录(5)板卡适配器概述
- 在ubuntu系统下cocos2dx移植到android平台
- 快到而立之年了,可是能撑得起而立吗?
- java的的socket编程_javasocket编程
- 4针串口线接法图_串口硬盘4针的小接口怎么样连接
- 振动试验设备的选择和使用
- 使用MediaPlayer的一些常见报错及解决方法-1
- NADH二钠CAS 606-68-8的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Logger.error不打印错误堆栈信息问题
- 系统检测到您疑似使用网页抓取工具访问本_12款最常使用的网络爬虫工具推荐...
- android视频播放异常,Android 播放视频常见问题小结