Because new method implementations cannot be specified for anonymous objects, all the signatures specified as part of the type of a template object are required to be fully implemented. For example, the cons object is required to fully implement all list operations, including do . However, because template objects will not be sent messages at run-time, they are not required to have their fields initialized. The cons object is not required to have its head and tail fields initialized. Template objects are analogous to concrete classes in class-based languages.
Concrete objects are complete, initialized objects that can be manipulated at run-time.
Like template objects, all signatures must be implemented, and in addition all fields must be initialized, either as part of the field declaration or as part of the object declaration or object constructor expression. Like other named objects, named concrete objects can be inherited from as well. If the object role annotation is dynamic or omitted, the object is considered fully manipulable by programs but no static checks for incomplete implementation of signatures or uninitialized fields are performed. Dynamic objects are designed to support exploratory programming, as discussed in section 3.10 . Since object constructor expressions create objects to be used at run-time, neither abstract nor template annotations are allowed on object constructor expressions.