The next section explores the functions dedicated to manage or generate new types.
A first group of functions is mainly dedicated to the interoperation with the Java type system. These functions allow close integration with Java types and interfaces, for example to provide framework extensions, class inheritance, access to super-classes and so on.
A second group of functions implements Clojure "object orientation" point of view. Clojure’s stance on object oriented programming departs from classic Java in at least two important aspects: it does not allow concrete inheritance and it separates inheritance from interface declaration. The latter is often referred as "a-la carte polymorphism" [231].
The chapter opens with a group of functions dedicated to checking, converting or creating Clojure core types. It then moves to more structured and custom ones, starting from functions closer to Java semantic and moving up to functions expressing Clojure approach to polymorphism: