One important point is that once you instantiate like this (def a (ABC. "Roger")) the "name" property is immutable by default, which is different from most OOP languages where you'd have to mark the property as "final" or something like that. If you really need mutable properties you'd have to use deftype instead of defrecord and mark the property with a the proper hint as described here <a href="https://clojuredocs.org/clojure.core/deftype" rel="nofollow">https://clojuredocs.org/clojure.core/deftype</a> . In most cases, unless you're building a low level data structure, mutable properties are not needed; they are harder to reason about and much harder to get right in the face of concurrency and multiple threads.