Учитывая, что Java была получена непосредственно из Objective-C (нет, на самом деле, так и было), модели времени выполнения этих двух очень похожи.
В Java понятие «класс» не такое общее, как в Objective-C.
В Objective-C класс является экземпляром того, что известно как метакласс. Для всех намерений и целей каждый объект Class в Objective-C делает именно так, как вы говорите; он описывает конкретный класс, доступный во время выполнения Objective C.
То же самое концептуально верно для классов Java. Есть одно ключевое отличие. В Objective-C методы класса наследуются по подклассам, и более значительно подкласс может переопределять метод (ы) класса суперкласса.
Например, класс NSArray
реализует метод класса +array
(«+» означает «метод класса»). Подкласс NSMutableArray
из NSArray
переопределяет +array
, чтобы вместо него возвращать изменяемый экземпляр.
java.lang.Class
больше похож на API-интерфейс Objective-C; это механизм, с помощью которого вы анализируете классы, доступные во время выполнения. Поскольку Java не имеет функционального API, API упакован в класс с соответствующим именем. java.lang.Class
- это своего рода API времени выполнения и метакласс все в одном.