实例和对象有什么区别?

时间:2010-05-21 20:36:08

标签: oop object instance

实例和对象有什么区别? 是否存在差异?

24 个答案:

答案 0 :(得分:45)

没有真正的重大差异,应该消耗太多的时间。可能有一些奇特的语言,有些人可能会占用很多空间来写,但最终,就编码人员,开发人员,程序员,架构师而言,一个类的实例和一个对象意味着相同的东西,通常可以互换使用。在我的职业生涯中,我从来没有见过任何会挑剔的人,花半个小时试图指出差异,因为实际上没有。时间可以更好地用于其他开发工作。

更新关于Swift,这就是发明Swift的Apple所喜欢的:

  

类的实例传统上称为对象。然而,   Swift类和结构在功能上比在更接近   其他语言,本章的大部分内容都描述了这些功能   可以应用于类或结构类型的实例。因为   其中,使用了更通用的术语实例。

答案 1 :(得分:43)

实例是内存中的对象。基本上你创建对象并在使用它们时实例化它们。

这是关于Classes Vs Objects Vs Instances的一个很好的写作,他正在谈论Java,但它适用于所有OO。

http://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/

答案 2 :(得分:24)

很棒的问题。

我会以最简单的方式解释它: 假设你的篮子里有5个苹果。这些苹果中的每一个都是Apple类型的对象,它具有一些特征(即大而圆,在树上生长)。

在编程术语中,你可以有一个名为Apple的类,其变量大小为:大,形状:圆形,栖息地:在树上生长。要在你的购物篮中放入5个苹果,你需要 实例化 5个苹果。 Apple apple1, Apple apple2, Apple apple3 etc...

或者:对象是某些东西的定义,实例是物理东西。

这有意义吗?

答案 3 :(得分:9)

实例:实例意味着只创建一个引用(副本)。

object:表示使用new运算符将内存位置与对象关联(是类的运行时实体)。

简单来说,Instance是指特定时间的对象副本,而object是指类的内存地址。

答案 4 :(得分:8)

假设您正在建造一些椅子。

显示如何构建椅子并将其组合在一起的图表对应于软件类。

假设您根据该图中的模式构建了五把椅子。同样,您可以根据类中的模式构造五个软件对象。

每把椅子都有一个唯一的号码,这个号码被烧成座位的底部,以识别每个特定的椅子。椅子3是椅子对象的一个​​实例。同样,内存位置3可以包含软件对象的一个​​实例。

因此,一个实例(主席3)是一个唯一的,特定的对象(椅子)表示。

答案 5 :(得分:5)

对象和实例大多相同;但有一个非常小的差异。 如果Car是一个类,则3 Car是3个不同的对象。所有这些对象都是实例。所以这3辆车是来自Car级实例的对象。

但“实例”这个词也可以表示“结构实例”。但是对象仅适用于类。

所有对象都是实例。 并非所有实例都必须是对象。实例可以是“结构实例”或“对象”。 我希望这能让你明白这一点。

答案 6 :(得分:5)

<强>对象

这是一个基本术语,基本上它是一个包含状态(变量)和行为(方法)的软件包

班级

对象的蓝色打印(模板) 实例 - 它是一个唯一的对象,例如你创建一个对象,这意味着你创建了两个实例

让我举个例子

Class student()
{
   private string firstName;
  public student(string fname)
  {
    firstName=fname;
  }
  Public string GetFirstName()
  {
    return firstName;
  }
}

对象示例

学生s1 =新生(“马丁”);    学生s2 =新生(“Kumar”);

s1,s2具有班级学生的对象

<强>实例

s1和s2是对象学生的实例 这两个是唯一的

它也可以被称为引用

基本上s1和s2是分配了对象的变量

答案 7 :(得分:4)

对象是一个构造,一个静态的东西,具有某些特征和特征,例如属性和方法,它可以是任何东西(字符串,用户控件等)

实例是该对象的唯一副本,您可以使用它并执行操作。

想象一下像电脑这样的产品。

xw6400工作站是一个对象

您的xw6400工作站(或您的WIFE的xw6400工作站)是xw6400工作站对象的一个​​实例

答案 8 :(得分:2)

实例是对象的特定表示。对象是通用的,而实例是在内存中创建的单个对象。通常,实例将为其属性分配值,以区别于对象类型的其他实例。

答案 9 :(得分:2)

Object - 一个类的实例,它具有自己的状态并可以访问其类所定义的所有行为。

实例 - 引用该特定类的内存区域。

答案 10 :(得分:1)

每个对象都被认为是其类的一个实例,但是每个类的实例都为每个属性都有自己的值 intances使用它们的类的intance共享属性名称和操作,但是一个对象包含对其类

的隐式引用

答案 11 :(得分:1)

如果我们看到对象和实例对象的定义 -

在运行时为类成员分配的内存称为对象或对象是Class的实例。

让我们看一下实例的定义 -

在运行时分配的内存 For Any 被称为实例变量。

现在通过Malloc,Calloc,Realloc了解任何运行时内存分配的含义:

struct p
{

}
p *t1
t1=(p) malloc(sizeof(p))

所以这里我们也分配了运行时内存分配,但是这里我们称之为实例,所以t1是实例,我们不能说t1作为对象所以每个对象都是Class的实例,但是每个Instance都不是Object。

答案 12 :(得分:1)

类:一个类是蓝色的。 对象:它是类的副本。 Instance:一个变量,用于保存对象的内存地址。

一个非常基本的分析示例

Class House - &gt;房子的蓝图。但你不能生活在蓝图中。你需要一个物理的房子,它是居住的类的实例。即,对象的实际地址是实例。实例代表对象。

答案 13 :(得分:1)

Java是一种面向对象的编程语言(OOP)。这意味着,除了基本类型以外,Java中的所有内容都是对象。

现在,Java对象类似于真实世界的对象。例如,我们可以用Java创建一个汽车对象,该对象将具有当前速度和颜色等属性。和行为,例如:加速和停车。

那是对象

enter image description here

另一方面,

实例是该对象的唯一初始化的副本,看起来像Car car = new Car()

查看以了解有关Java classes and object

的更多信息

答案 14 :(得分:1)

快速简单的答案

  • 一种规范,对象的蓝图
  • 对象类在内存中的物理存在
  • 实例对象的唯一副本(相同的结构,不同的数据)

答案 15 :(得分:1)

我不敢相信,除了一个人之外,没有人使用代码来解释这一点,让我也试一试!

// Design Class
class HumanClass {
    var name:String
    init(name:String) {
        self.name = name
    }
}

var humanClassObject1 = HumanClass(name: "Rehan") 

现在,左侧,即“ humanClassObject1”是对象,而右侧,即:HumanClass(name:“ Rehan”)是此对象的实例。

var humanClassObject2 = HumanClass(name: "Ahmad") // again object on left and it's instance on the right.

因此,基本上,实例包含该对象的特定值,而对象包含(在运行时)内存位置。

请记住著名的声明“对象引用未设置为对象的实例”,这意味着未初始化的对象没有任何实例。 在某些编程语言(如swift)中,编译器甚至不允许您设计一个无法初始化其所有成员的类(变量,例如名称,年龄等),但是在某些语言中,您可以这样做:

// Design Class
class HumanClass {
    var name:String // See we don't have any way to initialise name property.
}

只有在您尝试执行以下操作时,错误才会在运行时显示:

var myClass = HumanClass()
print(myClass.name) // will give, object reference not set to an instance of the object.

此错误表明,当我尝试在上面进行解释时,(变量\属性)的特定值是“ INSTANCE” ! 对象即“ myClass”包含内存位置(在运行时)。

答案 16 :(得分:1)

这个答案可能被认为是过时的,但是担心实例和对象之间的差异已经是过时的城市了。

我认为用javascript最好地描述了它:

let obj= {"poo":1} 
// "obj" is an object

经文

Class Trash {
    constructor(){this.poo = 1;}
}

let i = new Trash();
// "i" is an instance

答案 17 :(得分:1)

当声明一个自定义类型(类)的变量时,仅创建一个引用,称为对象。在此阶段,没有内存分配给该对象。它仅用作指针(指向将来存储对象的位置)。此过程称为“声明”。

Employee e; // e is an object

另一方面,使用new运算符声明自定义类型的变量时,该运算符将堆中的内存分配给该对象,并将引用返回给已分配的内存。此对象现在称为实例。此过程称为“实例化”。

Employee e = new Employee(); // e is an instance

另一方面,在某些语言(例如Java)中,从Oracle's documentation on Java的代码行可以明显看出,对象等同于实例:

注意:短语“实例化一个类”的含义与“创建对象”相同。创建对象时,您正在创建类的“实例”,因此要“实例化”一个类。

答案 18 :(得分:0)

一个对象可以是一个类,比如你有一个名为basketball的类。

但你想拥有多个篮球,所以在你的代码中你创造了超过1个篮球

说篮球1和篮球2。 然后运行您的应用程序。 你现在有2个对象篮球实例。

答案 19 :(得分:0)

一旦实例化一个类(使用new),该实例化的对象便成为对象。对象是可以遵循封装,多态性,面向对象编程的抽象原理以及程序与之交互以消耗类中定义的实例成员的真实事物的事物。对象包含实例成员(非静态成员)。

因此,类的实例是一个对象。当您指代它的起源时,使用“实例”一词,如果您说“一个类的实例”,则比“一个类的对象”更清楚(尽管后者可以用来)。 / p>

还可以阅读此Java文档中有关嵌套类的“内部类”部分-https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

答案 20 :(得分:0)

关于objectinstance之间的区别,我认为没有共识。

在我看来,人们可以在论文,博客文章,书籍或对话中互换性地更改它。

对于我来说,我的看法是,对象是内存中的通用活动对象,由使用的语言指定。就像Object中的Java类一样。无论它是否由容器管理,我们都不关心它的类型或与之相关的任何其他内容。

instanceobject,但与类型相关联,例如this method accepts Foo instancesyou can not put Animal instances in an instance of a List of Vehicles

例如,

object具有locks与其关联,而不是instance,而instance具有方法。 objects是垃圾收集,而不是instance

但是正如我所说的,这只是我的看法,而且我认为没有任何组织可以参考他们之间的标准定义,而且每个人的理解/定义都差不多(当然在限制范围内。

答案 21 :(得分:0)

对象是一般事物,例如,在数学中采用线性函数

ax + b是一个对象,而3x + 2是该对象的实例

对象<<<实例

常规<<<具体

没有其他了

答案 22 :(得分:0)

您需要了解 3 件事:类、对象和实例。

Class :Class 是您将创建对象的蓝图代码

Object :当内存分配给数据实体(从蓝图类创建)时,该数据实体或对它的引用称为对象

Instance :当数据被填充到一个 Object 中时,它就成为那个 Object 的一个实例。它也可以称为该对象的状态。

示例:在 C# 上下文中(这里的对象是引用类型)

假设我们有一个这样的类(这是您的蓝图代码)

public class Animal
{
//some fields and methods     
}

我们创建一个这样的对象

Animal a = new Animal();
Animal b = a;
Animal c = a;
Animal d = b;

那么问题来了:这里有多少对象和实例?

答案:只有 1 个对象,但有 4 个实例。

为什么?

在第一行 (Animal a = new Animal();),我们使用 new Operator 从类 Animal 创建了一个对象。该对象位于您的 RAM 上的某个位置。并且对该对象的引用在“a”中。 我们此时有 1 个对象和 1 个实例。

现在在下一行,我们将 a 分配给 b。这里对象没有被复制,但是来自“a”的对象的引用也存储在“b”中。因此,我们有 2 个实例,“a 和 b”。

这样下去,我们只复制位于某个内存中的同一对象的引用。

最后,我们有使用 new Operator 创建的单个对象的 4 个实例“a,b,c,d”。

(阅读 C# 中引用类型的工作原理以了解更多信息。我希望你能理解我的语言)

答案 23 :(得分:-2)

对象引用类,实例引用对象。换句话说,实例是对象的副本,其中包含特定值。