class A { void F() { System.out.println("a"); }}
class B extends A { void F() { System.out.println("b"); }}
public class X {
public static void main(String[] args) {
A objA = new B();
objA.F();
}
}
Здесь F()
вызывается динамически, не так ли?Поддерживает ли Java динамический вызов метода?
This article говорит:
... байт-код Java не поддерживает динамического вызова метода. Есть три поддерживаемых режима вызовов: invokestatic, invokespecial, invokeinterface или invokevirtual. Эти режимы позволяют вызывать методы с известной подписью. Мы говорим о строго типизированном языке. Это позволяет совершать некоторые проверки непосредственно при времени компиляции.
С другой стороны, динамические языки используют динамические типы. Таким образом, мы можем вызывать метод, неизвестный при компиляции времени, но это невозможно. с байт-кодом Java.
Что мне не хватает?
Что происходит, когда вы запускаете программу? –
@Dave: prints 'b' – Lazer
Автору этой статьи нужен урок при подсчете. – Syntactic