Extensibility

Using `private` visibility when creating classes in a library prevents easy code reuse. For instance, in our project, we decided to use the `locale` parameter for the UI, and use another parameter (named `content_locale`) for the content. On one of our website, there will be 2 UI languages, and 4 content langauges (it is an administration interface for a swiss project). We need to have another listener, but the developer in charge of this did not extend your class because he needed to rewrite the same properties because they were private. It's a shame, and it is not the first time this scenario happens to me. I think it calls for a (new ?) best practice : 

> When writing library code, try to avoid `private` .

Do you agree ?
How would you do that ? There would be a lot of duplicate code, and not only for object initializations, for expectations assertions too. I think the former could be mutualized in a `setUp` method, but I don't know about the former.