финальная и приватная статика - PullRequest
8 голосов
/ 16 июня 2010

Я прочитал, что выполнение:

public final void foo() {}

равно:

private static void foo() {}

, что означает, что метод не может быть переопределен!

Но я неувидеть эквивалентность, если метод закрытый, он автоматически недоступен ...

Ответы [ 2 ]

20 голосов
/ 16 июня 2010

Это правда, что вы не можете @Override ни один из методов.Вы можете только @Override не- final экземпляр метод.

  • Если это final, то вы не сможете @Override это
  • Если это static, то это не метод экземпляра для начала

Это НЕ верно, что они "равны", потому чтоодин - private static, а другой - public final.

  • Они имеют разный уровень доступности
  • Для метода instance требуется экземпляр, к которому нужно обращаться,метод class не
  • Метод class не может ссылаться на instance методы / поля из контекста static

Вы не можете @Override a static метод, но вы можете скрыть его другим методом static.Метод static, конечно, не допускает динамическую диспетчеризацию (что и достигается @Override).

Ссылки

Смежные вопросы

2 голосов
/ 16 июня 2010

Ни один из них не может быть переопределен, но по совершенно другим причинам.Первый - публичный нестатический метод, в то время как секод статический.Таким образом, первое не может быть переопределено только потому, что оно было объявлено как final, а второе, будучи статическим, никогда не может быть переопределено.

Обратите внимание, что с первого вы можете получить доступ к нестатическим членам класса, а со второгоне может.Поэтому они используются по-разному, поэтому не являются «равными».

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