Consider this code from the official OpenJDK source of java.awt.font.TextLayout
:
public final class TextLayout {
/* ... */
protected v
protected
members can still be accessed by code from the same package. My guess is that the class used to be non-final in some earlier (perhaps not even public) version, was then made final, and the protected method kept as such because there might be code in the same package that uses it (and not changed to package private simply because nobody saw a benefit from doing so).
Protected is (see access levels):
In the case of a final
class, the method's used by other classes in the same package: it's the same as no access modifier (also called "package-private").
To be used only in its own package
protected - member - Accessible only within its package and its subclasses
if someone defines a method as final then it cannot be Cannot be overridden and dynamically looked up.
Reference here: http://www.javacamp.org/javaI/Modifier.html
The class cannot be further extended or subclassed, but the method is still accessible from within the package.
Just so it's out there: if this was a class that extended another, the protected method might be extending a protected method in the superclass. Another possible reason to look for.