在Java的最终类中受保护方法的用例是什么?

时间:2011-07-28 12:38:24

标签: java inheritance awt final

请考虑java.awt.font.TextLayout的官方OpenJDK source中的此代码:

public final class TextLayout {

    /* ... */

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

这里的用例是什么?为什么编写这样的代码一般有意义?

5 个答案:

答案 0 :(得分:5)

受保护的是(见access levels):

  • 用于扩展课程,无论包装如何。
  • 当前包中的所有类都可以访问它。

对于final类,该方法由同一个包中的其他类使用:它与无访问修饰符(也称为“package-private”)相同。

答案 1 :(得分:4)

仍然可以通过同一个包中的代码访问

protected个成员。我的猜测是,在某些早期(可能甚至不是公共的)版本中,该类曾经是非final的,然后是最终的,并且受保护的方法保持原样,因为在同一个包中可能存在使用它的代码(而不是改为私有包,因为没有人看到这样做的好处。)

答案 2 :(得分:3)

仅在其自己的包中使用

protected - member - 仅在其包及其子类

中可访问

如果有人将方法定义为final,那么它就不能被覆盖并动态查找。

参考此处:http://www.javacamp.org/javaI/Modifier.html

答案 3 :(得分:1)

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

答案 4 :(得分:0)

就在那里:如果这是一个扩展另一个的类,受保护的方法可能会扩展超类中的受保护方法。寻找的另一个可能的原因。