If TreeSet is intended to be implemented by other libraries, I wouldn't have any private members, as it will be impossible to implement. Instead you can have a pure-abstract class to define the interface, and a BaseTreeSet designed for extension.