(编辑:本问题最初带有“Java”标签,因此没有类的语言超出了范围。)
对象
类的模式(示例)。 Dog类通过列出可能拥有的特征和行为来定义所有可能的狗; Lassie对象是一个具体的狗,具有特定版本的特征。狗有皮毛;Lassie对象有棕白色的皮毛。
实例
可以拥有类的实例;实例是在运行时创建的实际对象。在程序员的行话中,Lassie对象是Dog类的实例。特定对象属性的值集称为其状态。对象由状态和对象类中定义的行为组成。
为了完整起见:基于原型的编程语言中没有区分类和实例/对象。
如果你问这个问题,那么让我们退一步,你可能只知道基于类的面向对象编程。它大致是这样工作的:
Class
告诉你想要什么(数据模式)以及如何操作它(方法)。Object
,填充它所需的内容(数据),并使用定义在它上面的操作。然而,如果你可以找到另一种回答“你想让我的对象做什么以及如何做”的方式,你就不需要一个 Class
来拥有一个对象。在一种叫做 原型对象导向 的替代模型中,实例是通过克隆现有实例(原型)并复制和扩展克隆的行为来创建的。在这种格式中,对象没有遵循任何模式。它们只是一组数据和对数据进行操作的东西。
它们是相同的。在上下文中,“instance”强调它是类定义的实例化;“object”强调它是一个独特的实体。
在这个上下文中,它们实际上是相同的。 "Object" 可能被用作一个稍微更一般/模糊的术语,"Instance" 通常更具体地用作“类的实例”。
对象是一个更加通用的术语。C语言使用对象这个词,尽管它根本没有类 - 从它的角度来看,任何变量(例如)都是一个对象。
有一些面向对象的语言也没有类。类是指定对象属性的一种方式;给定类的所有对象共享这些属性。然而,在某些语言中(例如Javascript、Self),您不需要在类中指定这些属性。相反,从一个对象("示例")开始,从中克隆一个新对象并根据需要进行修改。如果您创建了许多未修改的对象,则可以说你最终以某种方式拥有了一个“类”(具有相同属性的对象),但那几乎是偶然的。
同样的事情:一个“对象”实际上是“类的一个实例”。
Person
类。然后,您创建Person
类的一个实例。让我们称他为Bob。所以bob = Person()
。问题是,bob
和Person
都是对象。当您执行Person()
时,实际上是在Person
类对象上调用构造函数,这会给您一个实例对象,即bob
。当你想要强调一个对象是从给定类型或类创建的时,可以使用实例。
请参阅维基百科中的这一段:
在每个对象都是从一个类创建的语言中,一个对象被称为该类的实例。如果每个对象都有一个类型,则具有相同类的两个对象将具有相同的数据类型。创建类的实例有时被称为实例化该类。
现实世界中的一个对象示例是“我的狗”,它是称为“狗”的类型(类)的实例,该类型是“动物”类的子类。