Поведение заключительного статического метода

Необходимо быть в состоянии использовать.RemoveNode метод узла или.RemoveChild метод родительского узла.

117
задан aioobe 9 June 2011 в 20:14
поделиться

5 ответов

Статические методы не могут быть переопределены, но их можно скрыть. Метод ts () для B не отменяет (не подвергается полиморфизму) ts () для A, но скроет его. Если вы вызовете ts () в B (НЕ A.ts () или B.ts () ... просто ts () ) будет вызываться один из B, а не A. Поскольку он не подвергается полиморфизму, вызов ts () в A никогда не будет перенаправлен на вызов в B.

ключевое слово final отключит скрытие метода.

157
ответ дан 24 November 2019 в 02:08
поделиться

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

A.ts () и B.ts () всегда будут отдельными методы.

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

Можно подумать, что в сообщении об ошибке будет использоваться слово «скрыто», а не «переопределено» ...

10
ответ дан 24 November 2019 в 02:08
поделиться

Метод ts () в B не отменяет метод ts () в A, это просто другой метод.

0
ответ дан 24 November 2019 в 02:08
поделиться

статические методы нельзя переопределить

Это не совсем так. Пример кода действительно означает, что метод ts в B скрывает метод ts в A. Так что это не совсем переопределение. На Джаваранч есть хорошее объяснение.

12
ответ дан 24 November 2019 в 02:08
поделиться

Я думаю, что здесь ошибка компиляции вводила в заблуждение. Он не должен был говорить «переопределенный метод является статическим окончательным», но вместо этого он должен был сказать «переопределенный метод является окончательным». Статический модификатор здесь не имеет значения.

1
ответ дан 24 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

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