Я играл с модификаторами со статическим методом и сталкивался с странным поведением.
Как мы знаем, статические методы нельзя переопределить, поскольку они связаны с классом, а не с экземпляром.
Итак, если у меня есть следующий сниппет, он компилирует fine
//Snippet 1 - Compiles fine
public class A {
static void ts() {
}
}
class B extends A {
static void ts() {
}
}
Но если я включу окончательный модификатор в статический метод в классе A, то компиляция завершится неудачей ts() в B не может переопределить ts() в A; переопределенный метод является статическим окончательным.
Почему это происходит, когда статический метод не может быть переопределен вообще?