Необходимо быть в состоянии использовать.RemoveNode метод узла или.RemoveChild метод родительского узла.
Статические методы не могут быть переопределены, но их можно скрыть. Метод ts ()
для B не отменяет (не подвергается полиморфизму) ts ()
для A, но скроет его. Если вы вызовете ts ()
в B (НЕ A.ts ()
или B.ts ()
... просто ts ()
) будет вызываться один из B, а не A. Поскольку он не подвергается полиморфизму, вызов ts ()
в A никогда не будет перенаправлен на вызов в B.
ключевое слово final
отключит скрытие метода.
Статические методы принадлежат классу, а не экземпляру.
A.ts ()
и B.ts ()
всегда будут отдельными методы.
Настоящая проблема в том, что Java позволяет вызывать статические методы для объекта-экземпляра. Статические методы с той же сигнатурой из родительского класса скрыты при вызове из экземпляра подкласса. Однако вы не можете переопределить / скрыть final методы .
Можно подумать, что в сообщении об ошибке будет использоваться слово «скрыто», а не «переопределено» ...
Метод ts () в B не отменяет метод ts () в A, это просто другой метод.
статические методы нельзя переопределить
Это не совсем так. Пример кода действительно означает, что метод ts в B скрывает метод ts в A. Так что это не совсем переопределение. На Джаваранч есть хорошее объяснение.
Я думаю, что здесь ошибка компиляции вводила в заблуждение. Он не должен был говорить «переопределенный метод является статическим окончательным», но вместо этого он должен был сказать «переопределенный метод является окончательным». Статический модификатор здесь не имеет значения.