Java 目标C中的类对象

Java 目标C中的类对象,java,objective-c,Java,Objective C,我是从Java到Objective C的,而类对象的想法让我想知道与Java的相似之处。从Apple文档中的Objective C指南: 类定义的信息被编译并记录在运行时系统可用的数据结构中。编译器只创建一个对象,一个类对象,来表示该类 因此,我的理解是,类对象是为程序将要使用的所有类创建的,而类对象是用于为该类创建对象的对象 作为比较,JVM是否为它加载的所有类都有一个类似的对象 Java中类似的结构应该是。我认为每个类都有一个类对象。 该类对象在低级时用于函数,如class\u getNam

我是从Java到Objective C的,而类对象的想法让我想知道与Java的相似之处。从Apple文档中的Objective C指南:

类定义的信息被编译并记录在运行时系统可用的数据结构中。编译器只创建一个对象,一个类对象,来表示该类

因此,我的理解是,类对象是为程序将要使用的所有类创建的,而类对象是用于为该类创建对象的对象


作为比较,JVM是否为它加载的所有类都有一个类似的对象

Java中类似的结构应该是。

我认为每个类都有一个类对象。

该类对象在低级时用于函数,如
class\u getName()
class\u getSuperclass()
class\u getVersion()
class\u respondsToSelector()
。如果所有类都有一个类对象,那么这些函数将为所有类返回相同的结果。

考虑到Java是直接从Objective-C派生的(不,实际上是这样),这两个类的运行时模型非常相似

在Java中,“类”的概念不像Objective-C中那样通用

在Objective-C中,类是元类的实例。出于所有意图和目的,Objective-C中的每个类对象都完全按照您所说的做;它描述了Objective-C运行时中可用的特定类

Java类在概念上也是如此。有一个关键区别。在Objective-C中,类方法是跨子类继承的,更重要的是,子类可以重写超类的类方法

例如,
NSArray
类实现了
+数组
类方法(“+”表示“类方法”)。
NSArray
NSMutableArray
子类重写
+array
以返回可变实例


java.lang.Class
更类似于Objective-C运行时API;它是一种机制,通过它您可以内省运行时中可用的类。因为Java没有函数API,所以API被封装在一个适当命名的类中
java.lang.Class
是一种集运行时API和元类于一体的语言。

java和Objective C在结构上有很多相似之处。它们都有类的概念,而Objective C协议几乎就是一个接口。Java部分基于Objective C(以及其他语言)。Java的接口源自Objective-C的接口(非正式类别和抽象类多于主要声明),这就是为什么Obj-C的接口取名为“协议”:只有一种
java.lang.Class
更像Objective-C运行时的API,因为它提供了内省可用类的方法。