类是面向对象语言的对象

时间:2013-02-07 14:01:34

标签: oop class object instance

类是面向对象语言的对象吗?如何通过class.method name的名称访问类方法? (内部工作)。是否与object.method相同?

如果Class与object相同(属于OO中每个东西的超类的对象类)并且我们实例化它(使它成为对象),可以创建一个类的实例的实例除了Object类。

(主要是对理论观点感兴趣,即使实际上并不需要)

4 个答案:

答案 0 :(得分:6)

嗯,这取决于您使用的语言;在纯OO语言中,一切都是对象(例如Smalltalk)类也不例外,也是对象。在其他语言中,类不被视为一等公民,它们只是特殊的语言结构或原始类型。从现在开始,我将使用Smalltalk作为目标语言,因为它具有反射支持和同质风格。

  

如何通过class.method名称的名称访问类方法?   (内部工作)。这与object.method相同吗?

由于类是对象,因此它们又是类的实例(metaclass)。因此,向类发送消息只是向对象发送消息,该对象的作用是表示类的行为方式。这里有很多文献,您可以查看示例herehere作为介绍。

  

如果Class与object相同(属于对象类)   OO中每一件东西的超类,我们实例化它(制作对象   它,我们可以创建一个除了的类的实例的实例   对象类。

我不确定我是否在这里关注你,但为了澄清,并不总是Object是所有类的超类。问题是如果你开始遵循类和元类之间的关系,你可能会达到一种无限循环。不同的语言以不同的方式解决这个问题,例如,在VisualWorks Smalltalk中,Objectnil的子类。问题是nil也是一个对象(记住,一切都是一个对象),它实际上代表“没有”。正如您所料,nil是类(UndefinedObject)的一个实例,它还实现了一些类协议。因此,它可以用来表示一个没有任何继承的类表单。)。

最后,我不知道这是否能回答你的问题,但是,你可以做很多很酷的事情,具有全面的反思能力,比如动态创建新课程或重塑现有课程。我将在这里留下一些您可能会对此主题感兴趣的文档:

答案 1 :(得分:2)

类不是对象,您可以将其视为对象的“蓝图”。它描述了该对象的形状和行为。对象是类的实例。

有关详细信息,请参阅here

答案 2 :(得分:1)

类是面向对象语言的对象吗?

阶级的概念首先是理论上的。即使您的语言不支持“类”(例如Javascript)的正式概念,您也可以定义具有“类”语义的事物。类是对象的模板,您可以从中创建实例

如何通过class.method名称的名称访问类方法?

我不太清楚你的意思。某些语言支持“静态”或“类”方法,这些方法不是在类的实例的上下文中调用的。所以它与“object.method”不同,它是类的常规方法,其中'this'(或等效的)将是调用该方法的实例。

Java (来自评论)

对于Java,有一个名为Object的类和一个名为Class的类。 See this。这些Java构造与Class和Object 概念分开。前者是实现细节 - 它们是设计者如何构造语言,后者是一般概念。因此,在Java中,您可以拥有一个实例的Object ,其中实例是类型Object的对象(概念)(Java构造)。

答案 3 :(得分:0)

对象的基本概念意味着已经分配了一些内存。正如devdigital所说的类只是一个对象的蓝图,该对象保持裸骨结构并确定对象在实例化时的行为方式。

类只是身体(没有灵魂),物体是与环境相互作用的生物体(有灵魂)或生物学上与生命哲学类比的外部刺激(公共方法和属性)的反应:)

技术上,类只是驻留在内存中的机器可解释代码(不是必需的主存储器或寄存器)。对象是加载到可执行存储器(寄存器/主存储器)中的代码