简体   繁体   中英

What's the use case of a protected method in a final class in Java?

Consider this code from the official OpenJDK source of java.awt.font.TextLayout :

public final class TextLayout {

    /* ... */

    protected void handleJustify(float justificationWidth) {
      // never called
    }
}

What's the use case here and why might it make sense to write code like that in general?

Protected is (see access levels ):

  • For extending classes, regardless of package.
  • All classes in current package can access it.

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").

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).

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

该类不能进一步扩展或子类化,但仍可从包中访问该方法。

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM