Какой случай использования защищенного метода в конечном классе в Java? - PullRequest
5 голосов
/ 28 июля 2011

Рассмотрим этот код из официального источника OpenJDK из java.awt.font.TextLayout:

public final class TextLayout {

    /* ... */

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

Какой здесь вариант использования и почему в общем случае имеет смысл писать такой код?

Ответы [ 5 ]

5 голосов
/ 28 июля 2011

Защищено (см. уровни доступа ):

  • Для расширения классов независимо от пакета.
  • Все классы в текущем пакете могут получить к нему доступ.

В случае класса final метод используется другими классами в том же пакете: он такой же, как и без модификатора доступа (также называемого "package-private").

4 голосов
/ 28 июля 2011

protected члены по-прежнему могут быть доступны по коду из того же пакета. Я предполагаю, что класс был не финальным в какой-то более ранней (возможно, даже не публичной) версии, затем был сделан финальным, и защищенный метод оставался таким, потому что в том же пакете может быть код, который его использует (а не изменился на пакет приватный просто потому, что никто не увидел выгоды от этого).

3 голосов
/ 28 июля 2011

Для использования только в собственной упаковке

protected - member - Доступно только в пределах своего пакета и его подклассов

если кто-то определяет метод как конечный, то он не может быть переопределен и динамически найден.

Ссылка здесь: http://www.javacamp.org/javaI/Modifier.html

1 голос
/ 28 июля 2011

Класс не может быть расширен или разделен на подклассы, но метод по-прежнему доступен из пакета.

0 голосов
/ 06 ноября 2011

Так оно и есть: если бы это был класс, который расширил другой, защищенный метод мог бы расширять защищенный метод в суперклассе. Другая возможная причина для поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...