;; Clojure has no classes and no inheritance at all.
;; what a base class declares, a PROTOCOL declares here
(defprotocol Shape
(line-count [this])
(area [this]))
;; a record implements the protocol instead of extending a class
(defrecord Square [side]
Shape
(line-count [_] 4)
(area [_] (* side side)))
(def square (->Square 5))
;; (line-count square) is 4
(println "line-count is" (line-count square))
(println "area is" (area square))