理解对象的类(class)与对象的类型(type)之间的差别
2011-05-27 11:29
471 查看
一个对象的类定义了对象是怎样实现的,同时也定义了对象的内部状态和操作的实现。但是对象的类型只与它的接口有关,接口即是对象能响应的请求的集合。一个对象可以有多个类型,不同类的对象也可以有相同的类型。
当然,对象的类和类型是有紧密关系的。因为类定义了对象所能执行的操作,也定义了对象的类型。当我们说一个对象是一个类的实例时,即只该对象支持类所定义的接口。
C++语言的类既指定对象的类型又指定对象的实现。smalltalk程序不声明变量的类型,所以编译器不检查赋给变量的对象类型是否是该变量类型的子类型。发送消息时需检查消息接收者是否实现了该消息,但不检查接收者是否是某个特定类的实例。
可能大家对上面的解释越搞越晕,其实我也很晕,这些最基本的概念就我而言我还不是很清楚,个人认为还是有必要搞清楚的。
在这里再理解几个基本概念
类型:是用来标识特定接口的一个名字。
类的类型:是由字段数据(成员变量)和操作字段数据的成员(属性、方法、构造函数、事件等)所构成的自定义类型。其中字段数据表示类实例(对象)的状态。
对象的接口:对象声明的每一个操作指定操作名、作为参数的对象和返回值,这就是所谓的操作的型构(signature)。对象操作所定义的所有操作型构的集合被称为对象的接口。
对象接口描述了该对象所能接受的全部请求的结合,任何匹配对象接口中型构的请求都可以发送给该对象。
欢迎大家交流和探讨
当然,对象的类和类型是有紧密关系的。因为类定义了对象所能执行的操作,也定义了对象的类型。当我们说一个对象是一个类的实例时,即只该对象支持类所定义的接口。
C++语言的类既指定对象的类型又指定对象的实现。smalltalk程序不声明变量的类型,所以编译器不检查赋给变量的对象类型是否是该变量类型的子类型。发送消息时需检查消息接收者是否实现了该消息,但不检查接收者是否是某个特定类的实例。
可能大家对上面的解释越搞越晕,其实我也很晕,这些最基本的概念就我而言我还不是很清楚,个人认为还是有必要搞清楚的。
在这里再理解几个基本概念
类型:是用来标识特定接口的一个名字。
类的类型:是由字段数据(成员变量)和操作字段数据的成员(属性、方法、构造函数、事件等)所构成的自定义类型。其中字段数据表示类实例(对象)的状态。
对象的接口:对象声明的每一个操作指定操作名、作为参数的对象和返回值,这就是所谓的操作的型构(signature)。对象操作所定义的所有操作型构的集合被称为对象的接口。
对象接口描述了该对象所能接受的全部请求的结合,任何匹配对象接口中型构的请求都可以发送给该对象。
欢迎大家交流和探讨
相关文章推荐
- c++如何理解map对象的value_type是pair类型
- java中对反射获取Class类型对象的三种方式的理解
- 深入理解Java类型信息(Class对象)与反射机制
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- 深入理解Java类型信息(Class对象)与反射机制
- 深入理解Java类型信息(Class对象)与反射机制
- 深入理解Java类型信息(Class对象)与反射机制
- 深入理解Java类型信息(Class对象)与反射机制
- java 类型信息(RTTI) 中 Class对象的理解
- replace type code with class(重构)用类替换类型码
- [C#] 不同类型的对象之间快速拷贝(比反射快十倍)
- 重构手法30:Replace Type Code with Class (以类取代类型码)
- TypeUtil 提供方法来判断对象或类的类型
- Jack's Notes11——打地鼠(forin遍历、type获取节点对象的类型)
- 分步理解String对象的数据类型
- Java编程思想之类型信息(Class对象)
- java基础-反射2(反射,反射操作对象,Class对象的使用,类型信息的获取)
- 非const引用参数传入不同类型编译不过的理解(拒绝将临时对象绑定为非const的引用的形参是有道理的)
- 把传过来的Object对象转换成Collection类型的对象。isArray()方法,判定此Class对象是否表示一个数组类。java.lang.reflect.Array 对任意数组进行操作
- 使用json_decode()转换返回数组或对象时出现:Cannot use object of type stdClass as array