Several Range constructors call Range.beforeStartKey(), which is not final. This is dangerous:
The superclass constructor runs before the subclass constructor, so the overriding method in the subclass will get invoked before the subclass constructor has run. If the overriding method depends on any initialization performed by the subclass constructor, the method will not behave as expected. Item 17, Effective Java Vol. 2, Bloch
If beforeStartKey() cannot be made final, the code should be refactored to make the constructors safe.