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

标签 oop class object instance

类是面向对象语言中的对象吗? 如何通过 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/

    相关文章:

    python - Python中如何继承和扩展类的属性?

    python - 当我希望它随每个实例而改变时,我的循环不断重复相同的值

    ruby - 输出 Ruby 类

    Javascript 使用 lodash 或其他库递归地转换引用其他属性的对象

    java - 在java中创建帐户类并输出

    java - 普通多态性和使用泛型的多态性有什么区别?

    c++ - 在 C++ 中什么时候需要指向派生类对象的基类指针?

    python - 类属性与方法参数性能? Python

    python - 在python中,如何使正确的操作数在乘以两个不同的类时优先( __rmul__ 方法)?

    ruby - 在 Ruby 中验证 DateTime 对象