Re: Searching for a notion
On Sep 1, 9:56 pm, r...@zedat.fu-berlin.de (Stefan Ram) wrote:
=BBout=AB is a field of the class =BBjava.lang.System=AB,
=BBprintln=AB is a method of the object =BBjava.lang.System.out=AB.
Both classes and objects each can have fields and methods.
Fields and methods of a class are called =BBstatic=AB,
fields and methods of an object are called =BBnon-static=AB (or so).
Is there a supernotion for both classes and objects that
means something like
=BBan entity that can have fields and methods=AB,
so that classes and objects are subnotions of this supernotion?
??
/\
^ / \ ^
is-a/ \is-a
/ \
/ \
class object
(In a sense a class is an object, but is more like a singleton
with static lifetime. However, a class is not an object in the
strict JLS sense of the word object, so I can't use =BBobject=AB
for this notion.)
The notion of a "metaclass" is useful here. A metaclass is a class
whose instances are classes. In Java, the closest thing to a
metaclass is 'Class' itself, as Object.class.class is Class<Class>.
Systems like Python and Smalltalk have more fully-featured metaclasses
and even allow programmers to define their own.
The definitions of "root" metaclasses -- the ones included in a
language -- tend to either be axiomatic ("it is this way by
definition") or circular.