Concrete inheritance lets one concrete class reuse implementation from another. Clojure rejects concrete inheritance in its object-oriented model, while retaining Java interoperation for extending classes and working with existing types. section 15.0
Clojure separates class extension from its preferred polymorphism mechanisms:
- gen-class can generate Java classes that implement interfaces and extend existing classes. section 15.0
- proxy can extend classes and override protected methods, whereas reify is limited to implementing interfaces. section 15.0
- defrecord is built on deftype and offers some form of inheritance, while defprotocol establishes dynamic dispatch independently from Java. section 15.0 section 11.1.4
Record-based alternative
A record creates a named object with fields and map-like access: `(defrecord abc [a b c])` followed by `(abc. 1 2 3)` produces `#user.abc{:a 1, :b 2, :c 3}`. This illustrates Clojure's structured-type approach rather than a concrete subclass declaration. section 11.1.4


















