gpt4 book ai didi

oop - 类是面向对象语言中的对象吗

转载 作者:行者123 更新时间:2023-12-04 07:04:55 25 4
gpt4 key购买 nike

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

如果类与对象相同(属于对象类,它是 OO 中所有事物的父类(super class))并且我们实例化它(使其成为对象),我们可以创建 Object 类以外的类的实例吗?

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

最佳答案

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

How Class methods are accessed by just name of the class.method name? (internal working). Is this same as as object.method?



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

And If the Class is same as object (belong to object class which is super class of every thing in OO) and we instantiate it (make object of it), can we make instance of an instance of an class other than Object class.



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

最后,我不知道这是否回答了您的问题,但是是的,您可以使用完整的反射功能做许多很酷的事情,例如动态创建新类或 reshape 现有类。我将在此处留下一些您可能会对此主题感兴趣的文档:
  • Metaclasses
  • Understanding Metaclasses
  • Debugging Objects
  • 关于oop - 类是面向对象语言中的对象吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com