How do companion objects provide access to private members in Scala