实例和对象之间有什么区别?有区别吗?
实例和对象之间有什么区别?有区别吗?
Answers:
实例是内存中的对象。基本上,您创建对象并在使用它们时实例化它们。
这是关于类vs对象vs实例的不错的文章,他在讲Java,但它适用于所有OO。
http://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/
实例和对象来自面向对象的程序设计。
对于某些编程语言(例如Java,C ++和Smalltalk),描述和理解代码很重要。在结构化编程中使用的其他语言中,这个概念不存在。
这是结构编程的观点。没有真正的重大差异,应该花费太多时间。也许有些人可能会花一些花哨的语言来写一些东西,但是到了最后,对于程序员,开发人员,程序员,架构师而言,一个类的实例和一个“对象”指的是同一件事,通常可以互换使用。在我的职业生涯中,我从未见过任何挑剔的人,花了半个小时试图指出差异,因为实际上没有任何差异。可以将时间花在其他开发工作上。
UPDATE至于斯威夫特,这是苹果谁发明斯威夫特喜欢:
传统上将类的实例称为对象。但是,Swift类和结构在功能上比其他语言要紧密得多,本章的大部分内容描述了可应用于类或结构类型的实例的功能。因此,使用了更通用的术语实例。
很好的问题。
我将以最简单的方式进行解释:假设您的篮子里有5个苹果。这些苹果中的每一个都是苹果类型的对象,它具有一些特征(即大,圆,生长在树上)。
用编程的术语来说,您可以拥有一个名为Apple的类,该类的变量为size:big,shape:round,landscape:grows在树上。要在您的购物篮中放入5个苹果,您需要实例化 5个苹果。Apple apple1, Apple apple2, Apple apple3 etc...
。
或者:对象是事物的定义,实例是物理的事物。
这有意义吗?
假设您要建造一些椅子。
该图显示了如何构建椅子并将其组装在一起的图对应于一个软件类。
假设您根据该图中的模式构建了五把椅子。同样,您可以根据一个类中的模式构造五个软件对象。
每把椅子的底部都有一个唯一的编号,用来识别每把椅子。椅子3是椅子样式的一个实例。同样,存储位置3可以包含一个软件模式实例。
因此,一个实例(椅子3)是椅子模式的唯一,特定的体现。
对象:
它是一个通用术语,基本上是具有状态(变量)和行为(方法)的软件包
类:
一个对象实例的蓝图(模板)-这是一个独特的对象,例如,您创建一个对象两次,这意味着您已经创建了两个实例
让我举个例子
Class student()
{
private string firstName;
public student(string fname)
{
firstName=fname;
}
Public string GetFirstName()
{
return firstName;
}
}
对象示例:
学生s1 =新学生(“马丁”);学生s2 =新学生(“库玛”);
s1,s2具有类Student的对象
实例:
s1和s2是对象Student的实例,两个是 唯一的。
它可以称为 参考。
基本上s1和s2是分配了对象的变量
对象和实例基本相同。但是差别很小。如果Car
是一个类,则3 Car
是3个不同的对象。所有这些对象都是实例。因此,这三辆车是Car
该类实例中的对象。
但是“实例”一词也可以表示“结构实例”。但是对象仅用于类。
所有对象都是实例。并非所有实例都必须是对象。实例可以是“结构实例”或“对象”。我希望这能使您清楚地看到差异。
对象是一种构造,是具有某些特征和特性的静态对象,例如属性和方法,它可以是任何东西(字符串,用户控件等)
实例是您可以使用并执行操作的对象的唯一副本。
想象一下像计算机这样的产品。
xw6400工作站是一个对象
您的xw6400工作站(或WIFE的xw6400工作站)是xw6400工作站对象的实例
如果看到对象和实例对象的定义-
在运行时为class成员分配的内存称为object或object是Class的实例。
让我们看看实例的定义-
在运行时为任意分配的内存称为实例变量。
现在,通过Malloc,Calloc,Realloc这样的代码,了解C中发生的任何运行时内存分配的含义:
struct p
{
}
p *t1
t1=(p) malloc(sizeof(p))
所以在这里我们也在分配运行时内存分配,但是在这里我们称为实例,因此t1是实例,在这里我们不能说t1作为对象,所以每个对象都是Class的实例,但每个Instance都不是Object。
我不敢相信,除了一个人之外,没有人使用代码来解释这一点,我也来试试吧!
// 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”包含内存位置(在运行时)。
当声明一个自定义类型(类)的变量时,仅创建一个引用,称为对象。在此阶段,没有内存分配给该对象。它仅用作指针(指向将来对象存储的位置)。此过程称为“声明”。
Employee e; // e is an object
另一方面,当使用new
运算符声明自定义类型的变量时,该运算符会将堆中的内存分配给该对象,并将引用返回给已分配的内存。现在将该对象称为instance。此过程称为“实例化”。
Employee e = new Employee(); // e is an instance
另一方面,在某些语言(例如Java)中,对象等效于实例,这从Oracle文档中有关Java的行中可以看出:
注意:短语“实例化一个类”的含义与“创建对象”相同。创建对象时,将创建类的“实例”,因此将“实例化”一个类。
一旦实例化了一个类(使用new),该实例化的对象便成为对象。对象是可以遵循面向对象编程的封装,多态性,抽象原理以及与程序进行交互以消耗类中定义的实例成员的真实对象的东西。对象包含实例成员(非静态成员)。
因此,类的实例是一个对象。当您指代它的起源时,使用“实例”一词,如果您说“一个类的实例”比“一个类的对象”更清晰(尽管后者可以用来)。
也可以阅读有关嵌套类的此Java文档的“内部类”部分-https: //docs.oracle.com/javase/tutorial/java/javaOO/nested.html
快速简单的答案
关于an object
和an 之间的区别instance
,我认为没有任何共识。
在我看来,人们可以在论文,博客文章,书籍或对话中互换性地改变它。
对我而言,我所看到的是,对象是内存中的通用活动对象,由使用的语言指定。就像中的Object
类Java
。无论它是否由容器管理,我们都不关心它的类型或与之相关的任何其他内容。
An instance
是,object
但与类型相关联,例如this method accepts Foo instances
或you can not put Animal instances in an instance of
a List of Vehicles
。
object
例如locks
,instance
s 与之关联,而不与s 关联,而instance
s具有方法。objects
是垃圾收集,而不是instance
s。
但是正如我所说,这只是我的看法,我认为我们之间没有任何组织可以参考标准定义,每个人的理解/定义都差不多(当然在限制范围内) 。
对象是通用的事物,例如,在数学中采用线性函数
ax + b是一个对象,而3x + 2是该对象的实例
对象<<<实例
一般<<<具体
没什么了
一个对象可以是一类,例如您有一个叫做篮球的类。
但您想拥有多个篮球,因此在您的代码中创建了多个篮球
比如篮球1和篮球2。然后运行您的应用程序。现在,您有2个对象Basketball的实例。
对象是指类,实例是指对象,换句话说,实例是对象中具有特定值的副本。