Всегда ли статические методы в Java разрешаются во время компиляции?
Всегда ли статические методы в Java разрешаются во время компиляции?
3 ответа
Несколько цитат:
"Когда компилятор компилирует этот класс, он решает во время компиляции, какой именно метод вызывается для каждого вызова статического метода (в этом большая разница от вызовов нестатического метода: точный метод, который должен быть вызван, определяется только во время выполнения в этих случаях). "
"Вызов статических методов зависит только от типа времени компиляции, для которого он вызывается".
Да, но если статический метод был удален во время выполнения, будет вызван соответствующий метод в базовом классе (имя и подпись должны точно соответствовать исходному методу во время компиляции, а метод должен быть доступен по правилам спецификации JVM).
Чтобы уточнить, рассмотрим код вызова:
Derived.fn();
И следующий вызванный код:
class Base {
public static void fn() {
System.err.println("Base");
}
}
class Derived extends Base {
public static void fn() {
System.err.println("Derived");
}
}
Печать Derived
,
Теперь я все компилирую. Затем перекомпилируйте только что Derived изменилось на:
class Derived extends Base {
}
Печать Base
,
Возможно, тогда я перекомпилирую только что Derived изменился на:
class Derived {
}
Выдает ошибку.
Краткий ответ: да
Я не смог найти точный раздел спецификации языка Java. Пожалуйста помоги.:)