On ne peut pas chacher la méthode code dans la classe codage car elle doit être utilisée de l'extérieure sur l'argument de la méthode binaire decode. On la rend donc publique. Pour recouvrer une notion d'abstraction équivalente à celle du programme java, on utilise les modules; plus précisément on rend le type retourné par la fonction code abtrait. La méthode code reste donc publique, mais la valeur qu'elle retourne ne peut pas être exploité puis que sont type est abstrait.
module M =
  (struct
    type t = int
    class codage n = object (_ : 'mytype)
      val code : int = n
      method code = code
      method decode (z : 'mytype) = (z#code = code)
    end
  end : sig
    type t
    class codage : int -> object ('mytype)
      method code : t
      method decode : 'mytype -> bool
    end
  end);;
class c = M.codage
let p = new c 1
and q = new c 2
let _ = p#decode q
    ;;