Всегда ли статические методы в 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. Пожалуйста помоги.:)

Другие вопросы по тегам