在面向对象语言中,类是一个对象吗?通过class.method name
的方式访问类方法是如何实现的(内部工作原理)?这与object.method
相同吗?
如果类和对象相同(属于面向对象中每个东西的超类),并且我们实例化它(将其制作为对象),我们能否创建除了Object类之外其他类的实例的实例。
(主要关注理论角度,即使从实际角度来说不需要)
好的,这取决于您使用的语言;在纯面向对象的语言中,所有内容都是对象(例如Smalltalk),类也不例外,也是对象。在其他语言中,类不被视为一等公民,它们只是特殊的语言结构或原始类型。从现在开始,我将使用Smalltalk作为目标语言,因为它支持反射和同质风格。
如何通过类名.方法名访问类方法?(内部工作原理)这与object.method相同吗?
由于类本身也是对象,因此它们反过来又是一个类的实例(即元类)。因此,向类发送消息就像向代表类行为的对象发送消息一样。有很多相关文献,您可以查看这里和这里进行一些介绍。
如果一个类与对象相同(属于面向对象中的超类),我们实例化它(创建它的对象),能否创建除Object类以外的其他类的实例的实例?最后,我不知道这是否回答了你的问题,但是可以通过完整的反射功能做许多很酷的事情,例如动态创建新类或重塑现有类。我在这里留下一些文件,您可能会对此主题感兴趣:
类不是一个对象,你可以把它看作是一个对象的“蓝图”。它描述了该对象的形状和行为。对象是类的实例。
更多信息请参见这里。
面向对象语言中,类是一个对象吗?
类的概念首先是理论上的。即使你的语言不支持“类”的正式概念(例如JavaScript),你也可以使用“类”语义定义一个东西。类是对象的模板,从中创建实例。
如何通过类名.方法名访问类方法?
我不太确定你的意思。一些语言支持“静态”或“类”方法,这些方法不在类的实例上下文中调用。因此,它与“object.method”不同,后者是类的普通方法,在该方法被调用的实例上,“this”(或等效项)将是实例本身。
Java(来自评论)
对于Java,有一个称为Object
的类和一个称为Class
的类。请参见这里。这些Java构造与Class和Object的概念分开。前者是实现细节——它们是设计师构建语言的方式,而后者是一般概念。因此,在Java中,您可以拥有 Object的实例,其中该实例是类型为Object
(Java构造)的对象(概念)。