заключительные и частные помехи

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

public final void foo() {}

равняется:

private static void foo() {}

оба подразумевать, что метод не является переопределяемым!

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

8
задан xdevel2000 16 June 2010 в 08:34
поделиться

2 ответа

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

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

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

  • У них разный уровень доступности
  • Метод instance требует наличия экземпляра для вызова, а метод class - нет
  • Метод class не может ссылаться на методы/поля instance из контекста static

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

Ссылки

Похожие вопросы

20
ответ дан 5 December 2019 в 07:33
поделиться

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

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

2
ответ дан 5 December 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: